首页 > 编程语言 >疑难杂症(已解决) | 为什么出现python中tkinter创建界面需要一闪而过才进入主窗口?

疑难杂症(已解决) | 为什么出现python中tkinter创建界面需要一闪而过才进入主窗口?

时间:2023-05-26 10:33:09浏览次数:34  
标签:__ tkinter python win self 疑难杂症 height width 窗口

一、具体问题

如图所示,我编写了一个主窗口的程序(如下所示,有兴趣的可以自己复制后运行),发现需要先进入第一个窗口再进入主界面,这不符合逻辑。

 

代码区域(完整代码):

from tkinter import *

class WinGUI(Tk):   
    def __init__(self):
        super().__init__()
        self.__win()
        
    def __win(self):            
        self.title("小软件")
        self.iconbitmap("icon.ico")  # 设置图标

        # 设置窗口大小、居中
        width = 1024
        height = 450
        screenwidth = self.winfo_screenwidth()
        screenheight = self.winfo_screenheight()
        geometry = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
        self.geometry(geometry)
        self.resizable(width=False, height=False)       


if __name__ == "__main__":
    win = WinGUI()   # 创建Win对象   
    win.mainloop()   # 启动应用程序的主事件循环

 

二、解决方案

尝试思路,由于我的代码量到达1000行+,开始以为是实例化了多个窗口导致,摸索了一个小时才发现,网上没有答案,问题确实比较隐蔽。经过排查,其实问题很简单,思路是应该先要设置窗口位置,再设置窗口名称、图标。

问题发生原因:下面这2行代码会事先使用系统默认的窗口生成位置(左上角某个位置)去创建窗口名称,图标。

    def __win(self):            
        self.title("小软件")
        self.iconbitmap("icon.ico")  # 设置图标

 

这样一来,解决方法自然很简单了,我把这【创建图标、窗口名称的2行代码】放到【创建位置的代码】之后就好了。

正确代码(完整代码)如下:

from tkinter import *

class WinGUI(Tk):   
    def __init__(self):
        super().__init__()
        self.__win()
        
    def __win(self):
        # 设置窗口大小、居中
        width = 1024
        height = 450
        screenwidth = self.winfo_screenwidth()
        screenheight = self.winfo_screenheight()
        geometry = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
        self.geometry(geometry)
        self.resizable(width=False, height=False)     

        self.title("小软件")
        self.iconbitmap("icon.ico")  # 设置图标  


if __name__ == "__main__":
    win = WinGUI()   # 创建Win对象   
    win.mainloop()   # 启动应用程序的主事件循环

 

动态演示:

 

标签:__,tkinter,python,win,self,疑难杂症,height,width,窗口
From: https://www.cnblogs.com/issacnew/p/17434043.html

相关文章

  • Python 数据库Insert语句脚本生成工具(SQL Server)
    编写这个小工具,是因为平时部署项目的时候,需要导出一些公共的数据(权限、参数设置等),覆盖插入正式环境。话不多说,直接上代码:importpyodbcimportwarningsimportdecimalimportwinregimportosimportconfigparserimporttimeimportdatetimewarnings.filterwarnings('igno......
  • python 判断列表是否为空
    python判断列表是否为空]'''判断列表是否为空'''if['a']:#不能写isTrueprint("不为空")if['a']isnotFalse:#等价于上面print("不为空")if[]:#不能写isprint("不为空")else:prin......
  • python 函数基本使用(笔记整理)
    一、函数的概念1.什么是函数函数代表功能,也称“方法”,它是对数据与功能代码进行封装,实现了功能代码的复用简单来说:函数就是把你要写的代码固定成一块,需要使用这个功能的时候直接调用即可2.函数的分类python函数有四类,分别是:内置函数(builtinfunctions),标准库函数,第三方......
  • inspect:获取python对象的有用信息
    楔子有些时候,我们需要得到一个对象的某些属性,我们最常用的就是通过type来查看该对象的类型,或者使用dir来查看该对象具有哪些属性。但是python提供了一个非常好的模块:inspect,来帮助我们更好地获取对象的属性,下面就来看看该模块支持哪些方法。检测对象的种类这里指的是种类,不是......
  • python中yield关键字
    yield就是保存当前程序执行状态。yield可以简单理解为return操作,但和return又有很大的区别。执行完return,当前函数就终止了,函数内部的所有数据、内存空间,全部都没有了。而yield在返回数据的同时,还保存了当前的执行内容,当你再一次调用这个函数时,他会找到你在此函数中的yield关键字......
  • Python实现JWT的生成及验证
    一、概述    在JWT安全性总结中提到了JWT的三个组成部分,包括header、claims以及signature,其中Signature是一个签名的部分,其计算方法为:HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret),即header的BASE64编码、点号、Clamis的BASE64编码以及将se......
  • Python求前后第n个月函数
    数据分析常用到:#求往后第n个月#monthstr格式:YYYY-MM##printnext_month("2023-05",1)#2023-06#printnext_month("2023-05",6)#2023-11#printnext_month("2023-05",8)#2024-01defnext_month(monthstr,n):yearnum=int(mont......
  • 如何在ubuntu下安装Vscode并且运行C语言文件或者python文件
    要想在ubuntu中编写并运行C语言或python文件,有两种方法,第一种是直接用vim编写(在我之前的文章中有详细介绍)可以点击如下链接:如何在ubuntu安装C语言环境-代师-博客园(cnblogs.com)如何在Ubuntu中编写Python代码并运行-代师-博客园(cnblogs.com) 今天我要说的是用专......
  • python 发送微信消息
    python自动化,可以模拟键盘输入,因此,可以控制微信,发送消息,代码如下:1importsys2importpyautogui3importpyperclip4importtime5importconfigparser67"""8安装依赖:9pipinstallpyautoguipyperclippyinstaller1011打包成exe:12pyins......
  • python 格式化代码
    安装pre-commitsudoaptinstallpre-commit-yrepos:-repo:https://github.com/python/blackrev:23.3.0hooks:-id:blacklanguage_version:python3exclude:src/ratel/potargs:["--line-length","18......