python-3.x - 打开时如何让tkinter窗口已经透明?
问题描述
我想要一个黑色窗口淡入。在全屏时,它可以完美地工作,但我需要一个特定的大小,当它打开时,它首先显示为黑色,然后变为透明并开始淡入。您有什么想法如何实现与全屏版本相同的流畅效果吗?
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()
解决方案
您可以使用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(window=None) 等待给定的小部件变得可见。这通常用于等到屏幕上出现新的顶层窗口。与 wait_variable 一样,此方法进入本地事件循环,因此应用程序的其他部分仍将照常工作。
更多关于update_idletasks()
:
update_idletasks() 调用所有挂起的空闲任务,不处理任何其他事件。这可用于执行几何管理并在必要时重绘小部件,而无需调用任何回调。
推荐阅读
- ios - 终止后再次加载 iPhone 应用程序时会调用什么函数?
- module - Odoo12 自定义模块
- python - QuerySet 获得前 x 的东西 - Django
- matlab - 有没有办法使用 max() 函数在 Matlab 中找到最多 2 个变量的函数?
- python - 使用 json 文件作为数组
- javascript - 针对 php 中的值禁用每个包的按钮
- python - How to create a new column in pandas based on a conditional that references a dictionary
- javascript - removeEventListener 没有按我的预期工作
- visual-studio - 无法使用 CMake 的 autouic 从链接库中包含 ui 文件
- python - Python中的标记变量