打开另一个py文件的tkinter图形形式(无文件,仅图形形式)

d5vmydt9  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(491)

我有一个主文件,带有tkinter图形表单(经典窗口),例如 A.pymain=Tk() . 另外,如果b.py文件位于主项目的子文件夹中,如何调用它?
例如,通过单击工具栏菜单中的一个项目,如“打开表单b”,我如何打开“b.py”的图形表单(经典窗口)?重要提示:无输出控制台,但仅图形形式p.s:如果请不要使用“self”。谢谢
文件a.py:main

  1. from tkinter import *
  2. from tkinter import ttk
  3. import tkinter as tk
  4. main=Tk()
  5. main.title("xxxxxx")
  6. main.geometry("750x750")
  7. main.configure(bg='#282828')
  8. # Bar Menù (no need to write all the code of bar menu)
  9. filemenu.add_command (label = 'Open form B', command = ????)

文件b.py:辅助

  1. from tkinter import *
  2. from tkinter import ttk
  3. import tkinter as tk
  4. secondary=Tk()
  5. secondary.title("yyyyyyy")
  6. secondary.geometry("750x750")
  7. secondary.configure(bg='#282828')

编辑(代码已更新,但我不知道是否正确):
文件a.py:main

  1. from tkinter import *
  2. from tkinter import ttk
  3. import tkinter as tk
  4. from b import *
  5. main=Tk()
  6. main.title("xxxxxx")
  7. main.geometry("750x750")
  8. main.configure(bg='#282828')
  9. # Bar Menù (no need to write all the code of bar menu)
  10. filemenu.add_command (label = 'Open form B', command = b.draw_graph)

文件b.py:辅助

  1. from tkinter import *
  2. from tkinter import ttk
  3. import tkinter as tk
  4. from b import *
  5. def draw_graph():
  6. secondary=Toplevel("home/mypc/Destkop/Folder1/Folder2/B.py/secondary)
  7. secondary.title("yyyyyyy")
  8. secondary.geometry("750x750")
  9. secondary.configure(bg='#282828')

上传2(仅b.py):

  1. from tkinter import *
  2. from tkinter import ttk
  3. import tkinter as tk
  4. def draw_graph():
  5. global secondary=Toplevel()
  6. secondary.title("yyyyyyy")
  7. secondary.geometry("750x750")
  8. secondary.configure(bg='#282828')
  9. # combobox
  10. comboboxx=["xxxxxx", "xxxxx"]
  11. combobox=ttk.Combobox(secondary, width=19)
  12. combobox.place(x=6, y=12)
  13. combobox.config(values=comboboxx)
  14. combobox.set("Scegli")
  15. # I only wrote a small part of the code, showing the combobox.
  16. # But the code is very long. I would not like to put everything
  17. # in the function (if that is possible)

错误:combobox=ttk。combobox(次要,宽度=19)名称错误:未定义名称“次要”

uyto3xhc

uyto3xhc1#

使用toplevel()函数
将第一个文件命名为您想要的名称并编写此代码(例如a.py)

  1. from tkinter import *
  2. from tkinter.ttk import *
  3. from b import *
  4. class app:
  5. def __init__(self, root):
  6. self.root = root
  7. self.menu_bar()
  8. self.root.mainloop()
  9. def menu_bar(self):
  10. self.app = app1()
  11. self.menubar = Menu(self.root)
  12. self.filemenu = Menu(self.menubar, tearoff=0)
  13. self.filemenu.add_command(
  14. label="Open A1", command=lambda: self.app.second(self.root))
  15. self.filemenu.add_separator()
  16. self.filemenu.add_command(label="Exit", command=self.root.quit())
  17. self.menubar.add_cascade(label="File", menu=self.filemenu)
  18. self.root.config(menu=self.menubar)
  19. if __name__ == "__main__":
  20. app(Tk())

在第二个文件中,确保您在a.py(来自filename import*)(对于示例为b.py)中编写时使用了他的名字,并按如下方式编写

  1. class app1:
  2. def second(self, root):
  3. self.root = Toplevel(root)
  4. Label(self.root, text="A2").pack(padx=20, pady=20)

这会解决你的问题

展开查看全部
3xiyfsfu

3xiyfsfu2#

编码 b.py 您应该保留函数来控制何时运行它
b、 派克

  1. import tkinter as tk # PEP8: `import *` is not preferred
  2. # in file `b.py` you don't need `import b` nor `from b import *`
  3. def draw_graph():
  4. win = tk.Toplevel()
  5. label = tk.Label(win, text="GRAPH")
  6. label.pack()

然后你就可以 import b 和阿辛 command=b.draw_graph main.py
(我使用 Button 创建最少的工作代码—这样每个人都可以简单地复制和运行它)

  1. import tkinter as tk # PEP8: `import *` is not preferred
  2. import b # PEP8: `import *` is not preffered
  3. def main():
  4. root = tk.Tk() # PEP8: spaces aroung `=` when assigning to variable
  5. # ... code ...
  6. #filemenu.add_command(label='Open form A1', command=b.draw_graph) # PEP8: `=` without spaces when assigning arguments
  7. # to use `b.draw_graph` you have to use `import b`, not `from b import *`
  8. button = tk.Button(root, text="Open form A1", command=b.draw_graph)
  9. button.pack()
  10. root.mainloop()
  11. if __name__ == '__main__':
  12. main()

如果你愿意

  1. from b import *

那你就得用 command=draw_graph 而不是 command=b.draw_graph 如果你有 b.py 在名为的子文件夹中 other 那你就可以了

  1. from other import b

并且仍然使用 command=b.draw_graph

  1. import other.b

然后你必须使用 command=other.b.draw_graph pep 8——python代码的样式指南
编辑:
我已经写了如何使用子文件夹中的代码,但我重复一遍
如果你有 Folder1/main.pyFolder1/Folder2/B.py 然后在 main.py 你只需要

  1. from Folder2 import B
  2. command=B.draw_graph

  1. import Folder2.B
  2. command=Folder2.B.draw_graph

(如果文件名为大写) B 然后模块也有大写名称 B )
它应该可以工作,而无需将文件夹添加到 sys.path 并且不添加文件 Folder2/__init__.py 如果你愿意 Folde1/main.pyFolder1/Folder2/Folder3/B.py 那你需要

  1. from Folder2.Folder3 import B
  2. command=B.draw_graph

  1. import Folder2.Folder3.B
  2. command=Folder2.Folder3.B.draw_graph

最终,您可以将当前文件夹添加到 sys.path 进口前

  1. import os
  2. import sys
  3. BASE_DIR = os.path.abspath(os.path.dirname(__file__))
  4. sys.path.append(BASE_DIR)
  5. from Folder2 import B
  6. # import Folder2.B

当您从不同的文件夹运行代码时,它也会起作用
(不同 Current Working Directory -检查 print(os.getcwd()) )
例如

  1. cd ..
  2. python Folder1/main.py

  1. cd /
  2. python /home/mypc/Destkop/Folder1/main.py
展开查看全部

相关问题