tkinter在窗口关闭之前不打印

时间:2019-05-31 18:31:35

标签: python python-3.x tkinter

这是一个最小的示例,其中用鼠标左击创建带有多个选择的弹出窗口。选择后,弹出窗口将被销毁并打印选择。

import tkinter as tk

class Interface(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.can = tk.Canvas(self,background="green",width = 500, height = 500)
        self.can.pack()
        self.bind('<Button-1>', self.choice)

    def choice(self, event):
        popup = tk.Toplevel()
        popup.attributes('-topmost', 'true')
        var = tk.IntVar()
        tk.Radiobutton(popup, text="Zero", value=0, variable=var, indicator=0).pack()
        tk.Radiobutton(popup, text="0ne", value=1, variable=var, indicator=0).pack()
        tk.Radiobutton(popup, text="Confirm", fg="red", indicator=0,
                       command=lambda:popup.destroy()).pack()
        popup.mainloop()
        print("choice:", var.get())

main = Interface()
main.mainloop()

几乎可以使用,但是仅在关闭主窗口后 打印。 此外,我不明白为什么某些按钮似乎已经被选中。

[Python 3.7,Windows 10]

1 个答案:

答案 0 :(得分:0)

我不确定您的代码为什么不起作用,但是我认为这与有效地运行两个mainloop()(其中一个“嵌套”在另一个内部)有关,因此结束了内部代码除非在主窗口的外部行也结束,否则不允许执行choice()方法中的下一行。

不管该解释是否正确,解决此问题的一种方法是分别定义回调函数,以使其易于在其中放入多个语句,然后同时弹出destroy()和{ {1}}致电:

print()