每当执行主脚本时,另一个文件中的 Window (Tkinter) 就会出现

Window (Tkinter) in another file shows up whenever the main script is executed

大家好。我一直对处理我的 python 代码感到困惑。我将 Tkinter 用于我的个人学校项目的 GUI。

我将此代码作为 window(对于我 main.py 菜单栏中的 Create 菜单)在另一个文件(假设 functions.py):

def createNew(coord):
    #create a new window element
    createWindow = tk.Tk()
    createWindow.title("Create a new tracker")
    createWindow.geometry("350x400")

    createWindow.focus_force()
    createWindow.grab_set()

    x = coord[0]
    y = coord[1]

    createWindow.geometry("+%d+%d" % (x + 250, y + 200))

上面的代码有 coord 参数,它使用此代码接收来自 main.py 的输入(functions.py 作为函数导入):

parentPosition = [window.winfo_x(), window.winfo_y()]
...
menubar = tk.Menu(window)
#file menu
file = tk.Menu(menubar, tearoff=0)
file.add_command(label='Create new tracker', command=funct.createNew(parentPosition))

我的问题是每当我执行 main.py 时,functions.py 中的 window 会自动显示,即使我没有 select 从 main.py 创建 菜单。无论如何,预期的位置都是正确的。

Actual snapshot of the UI

我的代码中有什么问题?任何见解将不胜感激。

PS。我有意将函数 createNew 放在 functions.py rathen 而不是 main.py

当你运行行

时你立即执行函数
file.add_command(label='Create new tracker', command=funct.createNew(parentPosition))

这是因为,通过在函数名后加上一对括号,您可以立即调用它,并将其 return 值传递给 add_command 函数。

为了解决这个问题,您可以使用 lambda 关键字来延迟函数的执行,直到它被再次调用:

file.add_command(label='Create new tracker', command=lambda: funct.createNew(parentPosition))

您可以找到有关 lambda 函数的更多信息 here