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

Python中tkinter colorchooser仅运行一次且卡顿的问题求助

解决ColorChooser卡顿与PyWaffle兼容问题

问题出在Tkinter和Matplotlib的GUI事件循环冲突上,直接调用colorchooser.askcolor没有正确初始化Tkinter的主上下文,导致第一次选择后事件循环异常,后续操作卡顿。

修正步骤:

  • 显式初始化Tkinter主窗口并隐藏,为颜色选择器提供合法的父上下文
  • 完成颜色选择后销毁Tkinter窗口,避免与Matplotlib的事件循环冲突

修正后代码:

import matplotlib.pyplot as plt
from pywaffle import Waffle
from tkinter import Tk, colorchooser

# 初始化Tkinter主窗口并隐藏
root = Tk()
root.withdraw()

colors_list = []
for i in range(1, 6):
    color_code = colorchooser.askcolor(title=f"Choose color {i}")
    # 处理用户取消选择的情况,避免添加None
    if color_code[1]:
        colors_list.append(color_code[1])

# 销毁Tkinter窗口,释放资源
root.destroy()

# 确保至少有5种颜色(如果用户取消选择可以补默认色)
while len(colors_list) < 5:
    colors_list.append("#cccccc")

fig = plt.figure(
    FigureClass=Waffle,
    rows=1, columns=5,
    values=[1,1,1,1,1],
    colors=colors_list,
    title={"label": "Home Color Scheme", "loc": "center", "size": 20}
)
plt.show()

关键说明:

  • root.withdraw()隐藏主窗口,只显示颜色选择器弹窗
  • root.destroy()在颜色选择完成后清理Tkinter资源,防止与Matplotlib的GUI循环冲突
  • 添加了用户取消选择的处理逻辑,避免列表中出现None导致绘图报错

内容的提问来源于stack exchange,提问作者Prixya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:01:18