疑难杂症(已解决) | 为什么出现python中tkinter创建界面需要一闪而过才进入主窗口?
一、具体问题
如图所示,我编写了一个主窗口的程序(如下所示,有兴趣的可以自己复制后运行),发现需要先进入第一个窗口再进入主界面,这不符合逻辑。
代码区域(完整代码):
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() # 启动应用程序的主事件循环
动态演示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)