从另一个模块调用一个函数

时间:2014-06-09 08:57:08

标签: function python-3.x import module tkinter

我正在制作一个项目,我需要将几个模块导入一个主模块。我决定将交互移动到单个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...")

1 个答案:

答案 0 :(得分:2)

导入模块对导入的模块可以看到的内容没有影响。如果您要使用mod1中的mod2内容和mod2中的mod1内容,则需要让它们相互导入并互相引用彼此的内容适当的模块:

# mod1
import mod2
...
    button2.config(text = "continue", command = mod2.func2)

# mod2
import mod1
def func2():
    mod1.button2.destroy()

循环导入会导致令人讨厌的初始化顺序问题,因此这样的导入是一个坏主意。将代码划分为模块时,请尝试以这样的方式执行此操作,这样就不需要导入循环。