我希望黑色窗口淡入。在全屏模式下,它可以正常工作,但是我需要特定的大小,在打开该窗口时,它首先显示为黑色,然后变为透明并开始褪色。您有什么想法可以实现与全屏版本一样的流畅效果吗?
import tkinter as tk
class Fader(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
self.parent.attributes("-alpha",0.0)
#self.parent.attributes("-fullscreen",True)
self.parent.geometry("600x800")
self.configure(bg='black')
self.fade_in()
def fade_in(self):
alpha = self.parent.attributes("-alpha")
if alpha < 1:
alpha += .01
self.parent.attributes("-alpha", alpha)
self.after(100, self.fade_in)
if __name__ == "__main__":
root = tk.Tk()
root.bind("<Escape>",lambda e: root.destroy())
Fader(root).pack(fill="both", expand=True)
root.mainloop()
答案 0 :(得分:0)
您可以使用withdraw()
隐藏窗口,然后使用deiconify()
稍后显示窗口并增加Alpha。但这似乎不起作用,除非您更新任务或等待窗口可见。
方法1:
能够使用update_idletasks()
来解决此问题,例如:
class Fader(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
self.parent.attributes('-alpha',0.0)
self.parent.withdraw() #hiding the window
#self.parent.attributes("-fullscreen",True)
self.parent.update_idletasks()
self.parent.geometry("600x800")
self.configure(bg='black')
self.fade_in()
def fade_in(self):
self.parent.deiconify() #bringing it back
..... #same code
方法2:
或如acw1668所说,您可以使用wait_visibility()
,例如:
class Fader(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
self.parent.wait_visibility(self.parent)
self.parent.attributes('-alpha',0.0)
self.parent.withdraw()
# self.parent.attributes("-fullscreen",True)
self.parent.geometry("600x800")
self.configure(bg='black')
self.fade_in()
def fade_in(self):
self.parent.deiconify()
...... #same code
有关wait_visibility()
的更多信息:
wait_visibility(窗口=无) 等待给定的小部件可见。这通常用于等待屏幕上出现新的顶层窗口。与wait_variable一样,此方法进入本地事件循环,因此应用程序的其他部分仍将照常工作。
有关update_idletasks()
的更多信息:
update_idletasks() 调用所有待处理的空闲任务,而不处理任何其他事件。可以用于执行几何管理并在必要时重绘窗口小部件,而无需调用任何回调。