在程序中创建Tkinter框时出现问题

时间:2019-04-29 09:16:50

标签: python tkinter

frame = Frame(root, width=300, height=250)没有正确创建Tkinter窗口。您能找到问题所在,然后告诉我这是什么吗?如果有帮助,我还有其余的代码。

def clicking_pad(worker_1):
    root = Tk()

    global left_click

    def left_click(store: object) -> object:
        return store

    global right_click

    def right_click(store: object) -> object:
        return store

    frame = Frame(root, width=300, height=250)
    frame.bind("<Button-1>", left_click("GO"))
    frame.bind("<Button-2>", right_click("STOP"))

    frame.pack()

    root.mainloop()

    return right_click == right_click(store)

1 个答案:

答案 0 :(得分:1)

如布赖恩·奥克利(Bryan Oakley)所述,您的代码可以毫无问题地创建Frame
我也不知道您的意思是“无法正确创建Tkinter窗口”。

正如acw1668所说,您在代码中有一些错误:

  1. 变量和函数不能使用相同的名称-left_clickright_click
  2. bind()(类似于command=after())需要功能名称-这意味着没有()。这称为“回调”。如果您需要将函数与参数一起使用,则可以创建不带参数的函数,以带参数的方式运行函数。您也可以使用lambda直接在bind()中创建此功能
  3. bind()无法从函数中获取结果,因此必须使用return变量来分配结果,然后才能在函数外部获取它。

我的观点:

  1. global是中键,<Button-2>是右键。
  2. <Button-3>期望获得一个参数的回调-bind()

event

编辑:没有import tkinter as tk def clicking_pad(worker_1): global left_click global right_click def on_left_click(store: object) -> object: #return store global left_click left_click = store print('[INSIDE] left_click:', left_click) def on_right_click(store: object) -> object: #return store global right_click right_click = store print('[INSIDE] right_click:', right_click) root = tk.Tk() frame = tk.Frame(root, width=300, height=250) frame.pack() frame.bind("<Button-1>", lambda event:on_left_click("GO")) frame.bind("<Button-3>", lambda event:on_right_click("STOP")) root.mainloop() print('[OUTSIDE] left_click:', left_click) print('[OUTSIDE] right_click:', right_click) clicking_pad(None)

lambda

或者如果您的函数返回值

def on_button_1(event):
    on_left_click("GO")

def on_button_3(event):
    on_right_click("STOP")

frame.bind("<Button-1>", on_button_1)
frame.bind("<Button-3>", on_button_3)