我正在制作一个项目,我需要将几个模块导入一个主模块。我决定将交互移动到单个Tkinter窗口。例如,我没有使用input()
而是使用tkinter.Entry()
。我有互动的每一步的功能。
当我通过第一个模块的最后一个功能时,配置的按钮有一个命令转到第二个模块中的一个功能。我收到一条错误,说明命令没有定义。
我似乎无法将配置的按钮变量导入下一个模块,而我尝试的任何其他内容都没有结果。第一个模块完成后,它根本不会进入下一个模块。
我在主模块中创建了主Tkinter窗口,并在导入其他模块后将其mainloop
。不应该定义我想要调用的函数吗?如果后者在一个单独的模块中,如何从一个函数到另一个函数?
这是一个最小的例子:
main_script.py
import tkinter
mainwindow = tkinter.Tk()
# here i set the window to a certain size etc.
import mod1
import mod2
mainwindow.mainloop()
mod1.py
import tkinter
def button1():
label.destroy()
button1.destroy()
button2.config(text = "continue", command = func2)
def button2():
label.destroy()
button1.destroy()
button2.config(text = "continue", command = func2)
label = tkinter.Label(text = "example label")
button1 = tkinter.Button(text = "button1", command = button1)
button2 = tkinter.Button(text = "button2", command = button2)
label.pack()
button1.pack()
button2.pack()
mod2.py
def func2():
button2.destroy()
print ("haha it works...")
答案 0 :(得分:2)
导入模块对导入的模块可以看到的内容没有影响。如果您要使用mod1
中的mod2
内容和mod2
中的mod1
内容,则需要让它们相互导入并互相引用彼此的内容适当的模块:
# mod1
import mod2
...
button2.config(text = "continue", command = mod2.func2)
# mod2
import mod1
def func2():
mod1.button2.destroy()
循环导入会导致令人讨厌的初始化顺序问题,因此这样的导入是一个坏主意。将代码划分为模块时,请尝试以这样的方式执行此操作,这样就不需要导入循环。