You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter 8.6.11/8.6.12二次窗口OptionMenu点击随机崩溃问题

Tkinter多窗口OptionMenu随机崩溃问题

问题说明

  • 需创建两个独立Tk()窗口,关闭第一个后打开第二个;第二个窗口的OptionMenu组件点击时会随机崩溃,连续运行多次后大概率触发失败
  • 终端报错无规律,常见三种类型:
    • zsh: segmentation fault python myProgram.py(出现频率最高)
    • zsh: bus error python myProgram.py
    • zsh: 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:07:28