python – Tkinter – 预加载窗口?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Tkinter – 预加载窗口?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2528字,纯文字阅读大概需要4分钟。
内容图文
![python – Tkinter – 预加载窗口?](/upload/InfoBanner/zyjiaocheng/806/0df577cf8e34401aadbd9d7ef33d60a2.jpg)
我开始构建一个python tkinter gui,问题是,在为gui添加许多功能之后,加载开始看起来非常难看.启动主循环时,在加载窗口小部件之前会出现一个空白窗口几分钟,其他Toplevel窗口也会出现相同的情况(除了那些不需要更新的静态元素很少的窗口).
我的问题是
有没有办法“预加载”窗口,这样当我打电话给它时,它会顺利开始?
例如
root = MyTkRoot()
root.build_stuff_before_calling()
root.mainloop() # Smooth without widget loading lag
我的部分代码
from root_gui import Root
import threading
from time import sleep
from data_handler import DataHandler
def handle_conn():
DataHandler.try_connect()
smtp_client.refresh()
def conn_manager(): # Working pretty well
while 'smtp_client' in locals():
sleep(3)
handle_conn()
smtp_client = Root()
handle_conn()
MyConnManager = threading.Thread(target=conn_manager)
MyConnManager.start() # Thanks to the second thread, the tk window doesn't have to wait for 3 seconds before loading the widgets.
smtp_client.mainloop()
关于git的完整项目
要放在这里的代码太多了……
https://github.com/cernyd/smtp_client
解决方法:
在您的操作系统上,tkinter似乎在加载它的小部件之前显示基本Tk窗口,导致几毫秒的空白窗口.要使其显示所有已加载的小部件,您将需要在启动时隐藏窗口,并且在加载后再次显示它.
有很多方法可以显示和隐藏窗口,我个人会使用.withdraw()从窗口管理器中移除窗口(就像它从未出现过那样)然后.deiconify()(基本上是“unminimize”)来显示窗口又来了.
class TEST(tk.Tk):
def __init__(self,*args,**kw):
tk.Tk.__init__(self,*args,**kw)
self.withdraw() #hide the window
self.after(0,self.deiconify) #as soon as possible (after app starts) show again
#setup app...
完全撤销窗口的另一种方法是使用.iconify()将其最小化,这样它就会显示在任务栏/停靠栏上,但在完全加载之前不会打开窗口.
隐藏/显示窗口的另一种方法是将-alpha属性更改为@double_j has done但我不建议在生产代码中,因为窗口在技术上仍然存在,它(和关闭按钮等)可以点击/交互在显示哪些内容可能不受欢迎之前的短暂时间内,从http://wiki.tcl.tk/9457开始,操作系统中的行为可能不明确:
Macintosh Attributes
-alpha double controls opacity (from 0.0 to 1.0)
…Unix/X11 Attributes
-alpha double controls opacity (from 0.0 to 1.0).
This requires a compositing window manager to have any effect. [compiz] is one such,
and xfwm4 (for the XFCE desktop) is another.
…Windows Attributes
-alpha double how opaque the overall window is; note that changing between 1.0 and any other value may cause the window to flash (Tk
changes the class of window used to implement the toplevel).
所以在一些unix机器上-alpha可能没有任何效果,在Windows上它可能会导致窗口闪烁(在它打开之前可能不是问题,但仍然值得注意)
据我所知,撤销和deiconify在所有平台中的工作方式相同.
内容总结
以上是互联网集市为您收集整理的python – Tkinter – 预加载窗口?全部内容,希望文章能够帮你解决python – Tkinter – 预加载窗口?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。