python - Tkinter 窗口未完全加载
问题描述
我试图有一个显示进度的进度窗口,以及在后台发生的任务。一切都按预期工作,除了窗口部分加载到屏幕上(它的多少取决于每次运行)。这是代码的相关部分:
def loading(): #Displays loading progress while setting up the exam
global load, progress
load = Toplevel()
load.title("Loading")
load.attributes('-topmost', True)
load.overrideredirect(True)
lab = Label(load, text = ("Preparing Your Exam, Please Wait!\nPlease DO NOT Open any Other Window.\n"
+"Doing so may lead to immidiate Termination."))
lab.grid(row = 0, column = 1, padx = 20, pady = 20)
progress=Progressbar(load,orient=HORIZONTAL,length=200,mode='determinate')
progress.grid(row = 1, column = 1, padx = 20, pady = 20)
log = Label(load, image = logo)
log.image = logo
log.grid(row = 0, column = 0, rowspan = 2, padx = 20, pady = 20)
w_req, h_req = load.winfo_width(), load.winfo_height()
w_form = load.winfo_rootx() - load.winfo_x()
w = w_req + w_form*2
h = h_req + (load.winfo_rooty() - load.winfo_y()) + w_form
x = (load.winfo_screenwidth() // 2) - (w // 2)
y = (load.winfo_screenheight() // 2) - (h // 2)
load.geometry(f'{w_req}x{h_req}+{x}+{y}')
以下是调用后发生的情况loading
:
loading()
conv_th = Thread(target = Convert).start()
该Convert
函数转换和处理图像,我没有分享它,因为它可能不相关。
我认为,这可能是因为它没有足够的时间来完全加载,但我无法真正弄清楚是什么导致程序以这种方式运行。任何帮助将不胜感激!
更新:即使conv_th = Thread(target = Convert).start()
省略,也会看到此行为,这意味着函数中可能存在问题loading()
。
解决方案
所以,我最终自己解决了这个问题。我说的是我认为最有可能的原因,如果我给出的原因不正确或有其他解决方案,请纠正我。
这部分代码,
w_req, h_req = load.winfo_width(), load.winfo_height()
w_form = load.winfo_rootx() - load.winfo_x()
w = w_req + w_form*2
h = h_req + (load.winfo_rooty() - load.winfo_y()) + w_form
x = (load.winfo_screenwidth() // 2) - (w // 2)
y = (load.winfo_screenheight() // 2) - (h // 2)
在窗口完全加载之前执行得太早,因此在此之前加载的任何数量都被视为尺寸,然后设置值。
load.update_idletasks()
在上述代码部分之前添加命令解决了问题。谢谢@martineau,您的评论对解决这个问题非常有帮助。
推荐阅读
- c++ - 关于 C++ 语言中 strrev() 函数的问题
- angular - 接收对象数组asp net API
- django - AppConfig.label 可以用于从应用程序导入模块吗?
- javascript - 如何在 Stencil.js 中使用外部第三方库
- java - 解析 SQL 并替换 Java 中的参数
- json - 将维基百科数据导入 Neo4j 时查询中的非法字符
- python - 如何从 Jupyter Notebook 中的 .py 文件调用函数?
- excel - VBAProject:运行时错误'13':类型不匹配
- firefox - Firefox 无法加载临时插件:错误:找不到配置文件目录
- c# - 使用 C# 将单个 XML 标记反序列化为单独的属性