为什么当 运行 作为 .exe(通过 pyinstaller 创建)时 tkinter GUI 的行为不同?
Why does a tkinter GUI behave differently when run as an .exe (created via pyinstaller)?
我有一个使用 tkinter
创建的透明 GUI。
import tkinter as tkinter
class TransparentWindow(tkinter.Frame):
def __init__(self, master = None):
# Initialize the mainframe and declare the master
tkinter.Frame.__init__(self, master)
# Make the window transparent
transparent = self.set_transparent_color(
window = self.master,
color = "yellow"
)
self.master["bg"] = transparent
self.master.wm_attributes("-topmost", True)
def set_transparent_color(self, window, color):
"""
Mark a sacraficial color as transparent for a window.
"""
window.wm_attributes(
"-transparentcolor",
color
)
return color
# Create window
root_window = tkinter.Tk()
TransparentWindow(root_window)
root_window.mainloop()
当我 运行 这是一个 .py
文件时, window 出现并保持在所有其他 windows 之上(由于 -topmost
属性) .这个window可以“点进去”。也就是说,你可以在window里面点击,和它后面的直接window进行交互。透明 window 将失去焦点,但仍保持在另一个 window.
之上
现在,当此代码通过 pyinstaller
命令编译成可执行文件时:pyinstaller --onefile -w script_name.py
并且该可执行文件是 运行,透明的 window 不会失去焦点如果你点击里面。
为什么 运行 与 .py
和 .exe
相同的代码会像这样改变焦点的行为?这是 pyinstaller
的事情,还是 tkinter
GUI 出于某种原因必然表现不同?
我有一个使用 tkinter
创建的透明 GUI。
import tkinter as tkinter
class TransparentWindow(tkinter.Frame):
def __init__(self, master = None):
# Initialize the mainframe and declare the master
tkinter.Frame.__init__(self, master)
# Make the window transparent
transparent = self.set_transparent_color(
window = self.master,
color = "yellow"
)
self.master["bg"] = transparent
self.master.wm_attributes("-topmost", True)
def set_transparent_color(self, window, color):
"""
Mark a sacraficial color as transparent for a window.
"""
window.wm_attributes(
"-transparentcolor",
color
)
return color
# Create window
root_window = tkinter.Tk()
TransparentWindow(root_window)
root_window.mainloop()
当我 运行 这是一个 .py
文件时, window 出现并保持在所有其他 windows 之上(由于 -topmost
属性) .这个window可以“点进去”。也就是说,你可以在window里面点击,和它后面的直接window进行交互。透明 window 将失去焦点,但仍保持在另一个 window.
现在,当此代码通过 pyinstaller
命令编译成可执行文件时:pyinstaller --onefile -w script_name.py
并且该可执行文件是 运行,透明的 window 不会失去焦点如果你点击里面。
为什么 运行 与 .py
和 .exe
相同的代码会像这样改变焦点的行为?这是 pyinstaller
的事情,还是 tkinter
GUI 出于某种原因必然表现不同?