Tkinter 8.6.11/8.6.12二次窗口OptionMenu点击随机崩溃问题
问题说明
- 需创建两个独立
Tk()窗口,关闭第一个后打开第二个;第二个窗口的OptionMenu组件点击时会随机崩溃,连续运行多次后大概率触发失败 - 终端报错无规律,常见三种类型:
zsh: segmentation fault python myProgram.py(出现频率最高)zsh: bus error python myProgram.pyzsh: trace trap python myProgram.py
- 仅OptionMenu存在该异常,按钮、复选框、输入框甚至ComboBox等组件均可正常运行
- 仅Tkinter 8.6.11/8.6.12版本存在此问题,降级至8.6.10可解决
- 已确保第一个
Tk实例销毁后再创建第二个,偏好将每个窗口封装为独立函数的写法,因此希望避免使用Toplevel
环境与版本测试情况
- 可正常运行的版本组合:
- Python 3.9.7 & Tk 8.6.10
- Python 3.10.0 & Tk 8.6.10
- 无法降级的限制:Python 3.9.11+(除3.10.0外)通过conda安装时受兼容性约束,只能使用Tk 8.6.11或8.6.12
- 系统环境:MacOS Ventura 13.3.1
测试代码
版本1(偏好写法:独立函数封装窗口)
from tkinter import * def window1(): first_win = Tk() first_win.geometry("420x350") exit_button = Button(first_win, text="Kill and open new window", command=first_win.destroy).pack() first_win.mainloop() def window2(): second_win = Tk() second_win.geometry("420x350") var = StringVar() options= ('a', 'b','c') var.set('a') OptionMenu( second_win , var, *options).pack() Button(second_win,text = 'kill',command = second_win.destroy).pack() second_win.mainloop() window1() window2()
版本2(关联函数写法)
from tkinter import * def new_win(): first_win.destroy() second_win = Tk() second_win.geometry("420x350") var = StringVar() options= ('a', 'b','c') var.set('a') OptionMenu( second_win , var, *options).pack() Button(second_win,text = 'kill',command = second_win.destroy).pack() second_win.mainloop() first_win = Tk() first_win.geometry("420x350") exit_button = Button(first_win, text="Kill and open new window", command=new_win).pack() first_win.mainloop()
内容的提问来源于stack exchange,提问作者Noura Ibrahim
相关产品推荐
相关产品推荐

