Mac系统下Tkinter点击OK按钮后窗口无法关闭问题求助
Tkinter窗口在Mac上点击OK无法关闭的解决方案
问题说明
这段Tkinter代码在Windows系统运行正常,但在Mac系统上点击OK按钮后,复选框窗口无法关闭。
原代码
import tkinter as tk window = tk.Tk() window.title('figures') window.geometry('300x300') l = tk.Label(window, bg='white', width=20, text='figures to plot') l.pack() def check1Clicked(): if var1.get() : puck_path=1 else: puck_path=0 return puck_path def check2Clicked(): if var2.get() : all_param=1 else: all_param=0 return all_param def check3Clicked(): if var3.get() : hand_path=1 else: hand_path=0 return hand_path var1 = tk.IntVar() var2 = tk.IntVar() var3 = tk.IntVar() c1 = tk.Checkbutton(window, text='puck path',variable=var1, onvalue=1, offvalue=0) #command=print_selection c1.pack(anchor=W) c1.select()# to check the box by default c2 = tk.Checkbutton(window, text='all parameters',variable=var2, onvalue=1, offvalue=0) c2.pack(anchor=W) c2.select() c3 = tk.Checkbutton(window, text='hand path',variable=var3, onvalue=1, offvalue=0) c3.pack(anchor=W) c3.select() Button(window, text='Ok', command=window.destroy).pack(side=RIGHT) window.mainloop()
问题原因
- 代码中
Button未使用tk.前缀,在import tkinter as tk的导入方式下属于语法错误,Windows环境可能未触发报错,但Mac上的Tkinter环境会影响按钮命令的正常执行。 - Mac系统的Tkinter对主窗口的
destroy()方法存在兼容性问题,单独调用可能无法彻底终止事件循环。
解决办法
修改OK按钮的定义,使用正确的命名空间前缀,并结合destroy()和quit()确保窗口正常关闭:
import tkinter as tk window = tk.Tk() window.title('figures') window.geometry('300x300') l = tk.Label(window, bg='white', width=20, text='figures to plot') l.pack() def check1Clicked(): return 1 if var1.get() else 0 def check2Clicked(): return 1 if var2.get() else 0 def check3Clicked(): return 1 if var3.get() else 0 var1 = tk.IntVar() var2 = tk.IntVar() var3 = tk.IntVar() c1 = tk.Checkbutton(window, text='puck path',variable=var1, onvalue=1, offvalue=0) c1.pack(anchor=W) c1.select() c2 = tk.Checkbutton(window, text='all parameters',variable=var2, onvalue=1, offvalue=0) c2.pack(anchor=W) c2.select() c3 = tk.Checkbutton(window, text='hand path',variable=var3, onvalue=1, offvalue=0) c3.pack(anchor=W) c3.select() # 定义关闭窗口的函数,确保同时销毁窗口并退出事件循环 def close_window(): window.destroy() window.quit() # 使用tk.Button创建按钮,绑定关闭函数 tk.Button(window, text='Ok', command=close_window).pack(side=RIGHT) # 可选:绑定窗口关闭按钮的协议,确保点击窗口叉号也能正常退出 window.protocol("WM_DELETE_WINDOW", close_window) window.mainloop()
额外建议:
- 确保Mac上的Tk组件为最新版本,可通过Homebrew执行
brew install python-tk更新。
内容的提问来源于stack exchange,提问作者simthi
相关产品推荐
相关产品推荐

