tkinter窗口预加载

  • 引言
  • 问题来源
    • 一般地tkinter使用
    • 一个榜样
  • 具体办法
    • 直接显示窗口
    • 我自己的项目
  • 效果
  • 结语

引言

前提说明,这不是一篇技术文章,只是一个经验分享。

问题来源

众所周知,tkinter作为Python的标准库GUI库,有一个问题就是加载比较慢,相关的实验也基本证明了这一点。但是,在你的项目中,导致窗口启动慢的真的是tkinter窗口自身的原因吗?这可不一定。

一般地tkinter使用

首先,让我们先回忆众多tkinter项目是如何在其中写tkinter窗口的出现时机的。

  1. 该import的import

  2. 加载类以及函数

  3. 确定与tkinter窗口相关的变量

  4. 加载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窗口预加载相关推荐

  1. jquery 当页面图片加载之后_图片的懒加载和预加载

    一.懒加载 [1.1]什么是懒加载? 懒加载也就是延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式.当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1 ...

  2. mui在线加载html,MUI 预加载页面

    MUI 预加载页面的几种方式: 一.预加载页面mui.preload必须放在plusReady事件中 var page = null; mui.plusReady(function() { //预加载 ...

  3. 前端项目分析:我是如何做图片优化的(预加载、懒加载和延迟加载)

    众所周知:前端页面上的图片是优化时最重要也是最令人头疼的部分,花费了几个月的时间才优化到令自己满意的一半程度,,,唉,一言难尽啊! 在此将几种方法总结一下,希望能帮到不少人吧- 图片的优化有两种方式: ...

  4. Kanzi学习之路(7):kanzi的资源预加载

    为了便于资源文件的管理,kanzi有着一套自己的资源文件管理系统,将所有的资源文件打包进.kzb文件中.但是资源文件又很庞大,为了加快开机速度,应用程序的响应速度,很多时候我们要选择预加载资源,多线程 ...

  5. 【3D动态思维导图制作软件】万彩脑图大师教程 | 思维导图预加载设置

    在万彩脑图大师中,你可以自定义预加载信息,让你的思维导图更具特色.使用此软件定义预加载信息主要有两种方法, 具体请看下面的操作: 方法一:点击菜单栏中的"编辑",在下拉菜单上选择& ...

  6. Unity Shader 变体处理与预加载流程

    一.什么是Shader变体,它是怎么出现的 当我们写完一个shader以后,unity需要加载和编译,这个过程由着色器的构建管线来完成,它的输入是着色器,而它的输出就是今天的主角---着色器变体:每一 ...

  7. 关于图片的预加载以及延伸

    图片的预加载不难,方式有很多种,本来不打算单独写一篇文章,因为网上有很多大神写的很好,本来转载一篇相关的优质文章就好了.直到我读了一篇文章,发现图片的预加载有不少延伸知识,于是加以整理,有了这篇文章. ...

  8. 一种网页游戏图片预加载方案

    一种网页游戏图片预加载方案 上个月我写了一篇关于网页游戏图片预加载技术的文章,叫<很山寨的网页游戏图片预加载技术>.这个方案用到项目上后,发现了一些问题,经过大家的努力,这些问题基本得到解 ...

  9. 很山寨的网页游戏图片预加载技术

    很山寨的网页游戏图片预加载技术 以下一种简单易懂,方便易用的网页图片预加载技术.:=D. 这种预加载技术使用了javascript技术.静态页面技术.div隐藏技术.gif动态图片技术.bash脚本技 ...

最新文章

  1. android camera工程师,浅析Android Camera架构
  2. 一起学WPF系列(2):第一个WPF应用程序
  3. 寒武纪抢答2020:一季度同比亏损扩大377%,86%营收大约在下半年
  4. git maven 一键部署_Jenkins实现一键部署maven项目
  5. SpringBoot项目使用微服务后在Service窗口启动应用后不显示端口号
  6. CSS 盒子模型(Box model)中的 padding 与 margin
  7. C#系列五《程序的分支》
  8. 数据库访问优化法则详解之利用更多的资源
  9. python supper()函数
  10. Oracle 删除重复数据
  11. [读书笔记] 代码整洁之道(二)
  12. 16进制发送 mqtt客户端调试工具_MQTT调试工具
  13. Web应用服务器——Tomcat的介绍、下载安装、环境配置与使用
  14. Java中使用多态的好处和弊端及其举例
  15. Imagination发布开源项目:适配PowerVR IP的Vulkan驱动和编译器合入Mesa 3D 图形库
  16. NP管理器 NPManager v3.0.49 安卓APK逆向反编译工具
  17. 第十九章 Caché 函数大全 $INCREMENT 函数
  18. VRChat与Anthos Capital携手合作,完成8,000万美元的D轮融资
  19. 深入剖析Android中最简单的数据存储方式:SharedPreferences
  20. JavaScript百炼成仙 后续章节

热门文章

  1. java 遍历数组连续元素_java遍历数组并重新拼接数组里的元素
  2. 黑莓为何放弃治疗 已无人可用
  3. 【魔方攻略】三阶魔方教程之关键步骤(原创)
  4. 《从问题到程序:用Python学编程和计算》——练习
  5. 出租车管理系统java_Java学员作品-出租车管理系统
  6. 蓝桥杯 java 放麦子_蓝桥杯——舍罕王赏麦子
  7. Android之实现QQ好友分组(ExpandableListView)
  8. MAC系统“无法验证开发者”问题
  9. 机械工程信号处理(一):基本概念及应用
  10. 下雪啦 也用Matlab实现大雪纷飞 Matlab雪花