当前位置:网站首页>tkinter窗口预加载
tkinter窗口预加载
2022-07-05 17:17:00 【Smart-Space】
引言
前提说明,这不是一篇技术文章,只是一个经验分享。
问题来源
众所周知,tkinter作为Python的标准库GUI库,有一个问题就是加载比较慢,相关的实验也基本证明了这一点。但是,在你的项目中,导致窗口启动慢的真的是tkinter窗口自身的原因吗?这可不一定。
一般地tkinter使用
首先,让我们先回忆众多tkinter项目是如何在其中写tkinter窗口的出现时机的。
该import的import
加载类以及函数
确定与tkinter窗口相关的变量
加载tkinter窗口
很明显,在tkinter窗口出现前,Python还要完成一些工作。其中,第一步和第三步会产生较长的耗时。原因是,有一些库真的复杂,如PIL、Panda等,这些都有专门的pyd以及动态链接库要导入,并且自身就有很多源文件;另一方面,tkinter窗口需要创建众多控件,特别是较复杂的项目,创建控件就需要一会时间。
在创建控件这一方面,customtkinter做得挺好,采用加载后渲染方式;TinUI的渲染加载速度很快。
在我的一个业余项目中,也就是TinReader-TinGroup,要加载内容还挺多,基本需要3~6秒。
一个榜样
你看看隔壁火狐,不就是不管三七二十一,先给你显示一个窗口框架(背景)吗?别人浏览器的预先加载量可是十分大的。
既然有这么多事要做,我还能做什么么呢,我该这么办呢?
其实很简单,就是把tkinter最先导入,下一行立马显示tkinter窗口。
wait,我没开玩笑。
具体办法
直接显示窗口
要做的改变很少。具体就如下:
#导入tkinter
from tkinter import *
#必要变量
#title=...
#width=...
#height=...
#使用高DPI...
#创建窗口
root=Tk()
root.geometry('500x500')
root.update()
#后续操作
注释已经写清楚了。
我自己的项目
在TinReader源码中,总共有1195行,其中需要载入pythonnet, PIL, tkwebview2, 各个依赖项;获取初始化设置等等。大概要耗3~6秒的时间。
现在,直接在开头:
# -*- coding: utf-8 -*-
from tkinter import Tk,Label,Frame,StringVar,scrolledtext,IntVar,Message,Radiobutton,Menu,Checkbutton,Canvas,\
Button as tkButton,LabelFrame,Toplevel,PhotoImage,Entry as tkEntry
import ctypes
#先导界面---
ctypes.windll.shcore.SetProcessDpiAwareness(1)
TinTop=Tk()#主窗口
TinTop.withdraw()
sw = TinTop.winfo_screenwidth()
#得到屏幕宽度
sh = TinTop.winfo_screenheight()
#得到屏幕高度
root=Toplevel()
root.geometry(str(sw//2-50)+'x'+str(sh-130)+'+0+10')
root.update()
#---
效果

如果没有这个顺序转化,那么从开始运行、tkinter空白窗口、tkinter窗口加载完毕这段时间,本来都是空空如也,使用甚至可能会感觉死机了。
源码确确实实是1000+行的代码,中间的步骤也确实比较耗时,现在,至少看到一个tkinter空白窗口都比什么都没有要好受。
结语
本篇只做经验分享。
建议使用的项目:初始化耗时的tkinter项目。
tkinter创新
边栏推荐
- 漫画:如何实现大整数相乘?(下)
- Summary of optimization scheme for implementing delay queue based on redis
- Force deduction solution summary 729- my schedule I
- 论文阅读_中文NLP_LTP
- Cartoon: how to multiply large integers? (I) revised version
- 漫画:有趣的【海盗】问题
- This 17-year-old hacker genius cracked the first generation iPhone!
- MySql 查询符合条件的最新数据行
- 这个17岁的黑客天才,破解了第一代iPhone!
- Which is more cost-effective, haqu K1 or haqu H1? Who is more worth starting with?
猜你喜欢

VBA drives SAP GUI to realize office automation (II): judge whether elements exist

Kafaka技术第一课

thinkphp3.2.3

Rider set the highlighted side of the selected word, remove the warning and suggest highlighting

ICML 2022 | Meta提出魯棒的多目標貝葉斯優化方法,有效應對輸入噪聲
Oracle缩表空间的完整解决实例

企业数字化发展中的六个安全陋习,每一个都很危险!
基于Redis实现延时队列的优化方案小结

Abnormal recovery of virtual machine Oracle -- Xi Fenfei
深入理解Redis内存淘汰策略
随机推荐
企业数字化发展中的六个安全陋习,每一个都很危险!
一文读懂简单查询代价估算
SQL Server(2)
Summary of optimization scheme for implementing delay queue based on redis
Database design in multi tenant mode
论文阅读_医疗NLP模型_ EMBERT
Cartoon: how to multiply large integers? (integrated version)
提高应用程序性能的7个DevOps实践
如何保存训练好的神经网络模型(pytorch版本)
Flask solves the problem of CORS err
华为云云原生容器综合竞争力,中国第一!
Tita 绩效宝:如何为年中考核做准备?
Learn about MySQL transaction isolation level
Cartoon: looking for the best time to buy and sell stocks
基于51单片机的电子时钟设计
7. Scala class
SQL删除重复数据的实例教程
一文了解Go语言中的函数与方法的用法
Winedt common shortcut key modify shortcut key latex compile button
统计php程序运行时间及设置PHP最长运行时间