我正在使用 TKinter 构建一个接口,但我遇到了一个问题,即每当创建一个新窗口时,200x200 像素的标准化 tkinter 窗口中什么都没有,它会在几分之一秒内闪烁,并且在我所有的修改(小部件等)之后制成。这发生在调用主循环之前和之后。
- 主界面已创建。
- 主循环统计
- 闪烁的窗口
- 主界面出现
同样在调用 Mainloop 之后,新创建的窗口也会发生这种情况。
- 出现主界面 - >按下按钮,创建一个新窗口
- 闪烁的窗口
- 出现新窗口
遗憾的是我不能给你一个示例代码......如果我尝试做一个最小的例子,这不会发生。也许创建了标准窗口,但它改变得太快了,以至于它没有出现在屏幕上。我什至不知道在这种情况下要查找什么......搜索“tkinter flashing window”一无所获。
编辑:我找到了问题的根源。它似乎是由和引起wm_iconbitmap
的。如果您从代码中删除图标,它可以正常工作,不会闪烁。但是,如果我将它与另一个一起使用,则窗口在创建时会闪烁。试试下面的代码。当然,您必须将图标放在工作目录中。FigureCanvasTkAgg
tkinter.Toplevel
这是一个代码示例和我正在使用的图标的链接,但我想任何图标都可以。
# coding=utf-8
import numpy as np
import matplotlib as mpl
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
import os
class INTERFACE(object):
def __init__(self):
self.root = tk.Tk()
self.root.protocol("WM_DELETE_WINDOW", self.EXIT)
self.root.wm_iconbitmap( os.path.abspath("icon.ico")) #<---- !!!!!!
self.root.geometry("1024x768")
canvas = FigureCanvasTkAgg(self.testfigure(), master=self.root) #<---- !!!!!!
canvas.get_tk_widget().grid(sticky=tk.N+tk.W+tk.E+tk.S)
self.root.rowconfigure(0, weight=1)
self.root.columnconfigure(0, weight=1)
def testfigure(self):
x=np.linspace(0, 2*np.pi,100)
y=np.sin(x)
fig = mpl.figure.Figure()
sub = fig.add_subplot(111)
sub.plot(x,y)
return fig
def EXIT(self):
Top = tk.Toplevel(master=self.root)
Top.wm_iconbitmap( os.path.abspath("icon.ico")) #<---- !!!!!!
Top.transient(self.root)
Top.resizable(width=False, height=False)
Top.title("Exit")
tk.Message(Top,text="Do you really want to quit?", justify=tk.CENTER, width=300).grid(row=0,columnspan=3)
tk.Button(Top,text="YES",command=self.root.destroy).grid(row=1,column=0)
tk.Button(Top,text="No",command=self.root.destroy).grid(row=1,column=1)
tk.Button(Top,text="Maybe",command=self.root.destroy).grid(row=1,column=2)
def start(self):
self.root.mainloop()
if __name__ == '__main__':
INTERFACE().start()