调用“wm_iconbitmap”和“resizable”后的Tkinter,Flashing Window

时间:2013-11-21 14:00:20

标签: python tkinter

每当我为窗口管理器创建窗口集和图标并更改窗口的其他属性(例如“可调整大小”)时,它就会“闪烁”。我想这是因为再次调用窗口管理器并重新启动窗口。有什么方法我可以称之为“沉默”的改变或类似的东西?我的研究工作并不是很幸运。

如果您想亲眼看看,您将需要一个图标文件。我上传了我正在使用的图标here。如果您不熟悉下载它,您还可以在系统目录中找到合适的图标文件。搜索“* .ico”。任何16x16图标都可以。

#! coding=utf-8
import tkinter as tk
import os

def CENTER_WINDOW(window,parent):
    """ Verschiebt ein Fenster auf dem Bildschirm"""        
    # get window size
    window.update_idletasks()
    w = window.winfo_width()
    h = window.winfo_height()

    # get parent size
    if parent=="screen":
        p_x , p_y  = window.winfo_screenwidth(), window.winfo_screenheight()
        p_ox, p_oy = 0,0
    else:
        parent.update_idletasks()
        p_x , p_y  = parent.geometry().split("+")[0].split("x")
        p_x , p_y  = int(p_x) , int(p_y)
        p_ox, p_oy = int(parent.geometry().split("+")[1]),int(parent.geometry().split("+")[2])

    # calculate position x, y
    x = p_x/2 + p_ox - w/2
    y = p_y/2 + p_oy - h/2

    window.geometry('%dx%d+%d+%d' % (w,h,x,y))
    window.update_idletasks()

def top():
    T = tk.Toplevel()
    T.wm_iconbitmap( os.path.abspath("icon.ico"))
    T.resizable(width=tk.FALSE, height=tk.FALSE)
    CENTER_WINDOW(T,root)

root = tk.Tk()
root.geometry("100x50")
but = tk.Button(root,text="Toplevel",command=top)
CENTER_WINDOW(root,"screen")
but.pack()

root.mainloop()

1 个答案:

答案 0 :(得分:1)

粗略概述:

  • 创建后立即致电窗口
  • 进行调整
  • 当您准备好显示时,在窗口上调用deiconify