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

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

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

from tkinter import *
from tkinter import ttk
import tkinter as tk

main=Tk()
main.title("xxxxxx")
main.geometry("750x750")
main.configure(bg='#282828')

# Bar Menù (no need to write all the code of bar menu)

filemenu.add_command (label = 'Open form B', command = ????)

文件b.py:辅助

from tkinter import *
from tkinter import ttk
import tkinter as tk

secondary=Tk()
secondary.title("yyyyyyy")
secondary.geometry("750x750")
secondary.configure(bg='#282828')

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

from tkinter import *
from tkinter import ttk
import tkinter as tk
from b import *

main=Tk()
main.title("xxxxxx")
main.geometry("750x750")
main.configure(bg='#282828')

# Bar Menù (no need to write all the code of bar menu)

filemenu.add_command (label = 'Open form B', command = b.draw_graph)

文件b.py:辅助

from tkinter import *
from tkinter import ttk
import tkinter as tk
from b import *

def draw_graph():
    secondary=Toplevel("home/mypc/Destkop/Folder1/Folder2/B.py/secondary)
    secondary.title("yyyyyyy")
    secondary.geometry("750x750")
    secondary.configure(bg='#282828')

上传2(仅b.py):

from tkinter import *
from tkinter import ttk
import tkinter as tk

def draw_graph():
    global secondary=Toplevel()
    secondary.title("yyyyyyy")
    secondary.geometry("750x750")
    secondary.configure(bg='#282828')

# combobox

comboboxx=["xxxxxx", "xxxxx"]
combobox=ttk.Combobox(secondary, width=19)
combobox.place(x=6, y=12)
combobox.config(values=comboboxx)
combobox.set("Scegli")

# I only wrote a small part of the code, showing the combobox.

# But the code is very long. I would not like to put everything

# in the function (if that is possible)

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

uyto3xhc

uyto3xhc1#

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

from tkinter import *
from tkinter.ttk import *
from b import *

class app:
    def __init__(self, root):
        self.root = root
        self.menu_bar()
        self.root.mainloop()

    def menu_bar(self):
        self.app = app1()
        self.menubar = Menu(self.root)
        self.filemenu = Menu(self.menubar, tearoff=0)
        self.filemenu.add_command(
            label="Open A1", command=lambda: self.app.second(self.root))
        self.filemenu.add_separator()
        self.filemenu.add_command(label="Exit", command=self.root.quit())
        self.menubar.add_cascade(label="File", menu=self.filemenu)
        self.root.config(menu=self.menubar)

if __name__ == "__main__":
    app(Tk())

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

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

这会解决你的问题

3xiyfsfu

3xiyfsfu2#

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

import tkinter as tk  # PEP8: `import *` is not preferred

# in file `b.py` you don't need `import b` nor `from b import *`

def draw_graph():
    win = tk.Toplevel()
    label = tk.Label(win, text="GRAPH")
    label.pack()

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

import tkinter as tk  # PEP8: `import *` is not preferred
import b  # PEP8: `import *` is not preffered

def main():
    root = tk.Tk()  # PEP8: spaces aroung `=` when assigning to variable

    # ... code ...

    #filemenu.add_command(label='Open form A1', command=b.draw_graph)  # PEP8: `=` without spaces when assigning arguments
    # to use `b.draw_graph` you have to use `import b`, not `from b import *`

    button = tk.Button(root, text="Open form A1", command=b.draw_graph)
    button.pack() 

    root.mainloop()

if __name__ == '__main__':    
    main()

如果你愿意

from b import *

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

from other import b

并且仍然使用 command=b.draw_graph

import other.b

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

from Folder2 import B

command=B.draw_graph

import Folder2.B

command=Folder2.B.draw_graph

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

from Folder2.Folder3 import B

command=B.draw_graph

import Folder2.Folder3.B

command=Folder2.Folder3.B.draw_graph

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

import os
import sys

BASE_DIR = os.path.abspath(os.path.dirname(__file__))
sys.path.append(BASE_DIR)

from Folder2 import B

# import Folder2.B

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

cd ..
python Folder1/main.py

cd /
python /home/mypc/Destkop/Folder1/main.py

相关问题