python - 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运行可以完全消除错误,但我仍然无法找出执行之间的原因或发生了什么变化。有什么想法吗?
解决方案
推荐阅读
- numpy - 使用 numpy.exp 计算对象寿命
- android - Android Studio - Gradle 同步失败:无法初始化类 sun.util.calendar.ZoneInfoFile
- ios - 在 SwiftUI 中创建带有节标题的动态列表?
- bash - 如何使用 sed 从 .ini 中提取值
- vue.js - 如何将一个 v-model 的值适合另一个 v-model?
- swift - 如何在 Swift 中运行 shell 命令?
- javascript - 使用 .filter() 和 .map() 解决 Javascript 中的两个集合的交集
- java - 混淆代码时如何使用proguard-maven-plugin过滤所有maven依赖?
- sql-server - SQL 聚合数据以获取前 X
- python - 使用 labelimg 训练模型后找不到图像错误