这是一个最小的示例,其中用鼠标左击创建带有多个选择的弹出窗口。选择后,弹出窗口将被销毁并打印选择。
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]
答案 0 :(得分:0)
我不确定您的代码为什么不起作用,但是我认为这与有效地运行两个mainloop()
(其中一个“嵌套”在另一个内部)有关,因此结束了内部代码除非在主窗口的外部行也结束,否则不允许执行choice()
方法中的下一行。
不管该解释是否正确,解决此问题的一种方法是分别定义回调函数,以使其易于在其中放入多个语句,然后同时弹出destroy()
和{ {1}}致电:
print()