首页 > 解决方案 > Tkinter GUI 偶尔会中途打开,但按下修饰键可以让它继续运行?

问题描述

我正在 Ubuntu 18.04 上使用 Tkinter 和 Python2.7 开发几个 GUI(目前为 28 和 267 kB),当将它们拉到我自己以外的机器上时,它们有时(50% 的时间)软故障从终端启动。GUI 将部分打开(出现窗口但没有或很少有小部件)并在此时冻结。

当我按下 Shift、Control、Alt(键盘的任一侧)、Num Lock、Caps Lock 或 Windows 键中的任何一个时,这种冻结就会解冻。GUI 会按预期进行加载和运行,但每当从 GUI 内部生成新窗口时,偶尔会出现问题。我遇到的所有机器似乎都具有相同的软件和操作系统设置。

有人知道 Tkinter 的这个怪癖吗?

编辑:轻度可重现的源代码

#! /usr/bin/env python
import Tkinter as Tk


class TestProgram:
    def __init__(self, parent):
        self.top = parent
        self.top.after(1000, self.top.destroy)

root = Tk.Tk()
GUI_obj = TestProgram(parent=root)
root.mainloop()

令人讨厌的是,当将其刮到准系统时,半冻结发生一次,有几十次尝试使用./TestProgram从终端启动它。

我在系统监视器冻结时查看了它,在它冻结几秒钟后状态从运行切换到睡眠,并在所有内容加载后按其中一个键将其切换回运行,然后进入睡眠。

编辑 2:从示例中取出更多代码,发现在循环上运行程序 100 次迭代并等待它冻结要容易得多。

编辑 3:我发现将代码作为sudo ./TestProgram运行可以完全消除错误,但我仍然无法找出执行之间的原因或发生了什么变化。有什么想法吗?

标签: pythonpython-2.7user-interfacetkinterubuntu-18.04

解决方案


推荐阅读