19

有没有办法使用 Tkinter 在 Python 3.x 中创建“加载屏幕”?我的意思是像 Adob​​e Photoshop 的加载屏幕,具有透明度等。我设法摆脱了已经使用的框架边框:

root.overrideredirect(1)

但如果我这样做:

root.image = PhotoImage(file=pyloc+'\startup.gif')
label = Label(image=root.image)
label.pack()

图像显示正常,但带有灰色窗口背景而不是透明度。

有没有办法为窗口添加透明度,但仍能正确显示图像?

4

9 回答 9

43

这是可能的,但它取决于操作系统。这将在 Windows 中工作:

import Tkinter as tk # Python 2
import tkinter as tk # Python 3
root = tk.Tk()
# The image must be stored to Tk or it will be garbage collected.
root.image = tk.PhotoImage(file='startup.gif')
label = tk.Label(root, image=root.image, bg='white')
root.overrideredirect(True)
root.geometry("+250+250")
root.lift()
root.wm_attributes("-topmost", True)
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")
label.pack()
label.mainloop()
于 2014-02-28T22:14:10.890 回答
17

这是macOS的解决方案:

import tkinter as tk

root = tk.Tk()
# Hide the root window drag bar and close button
root.overrideredirect(True)
# Make the root window always on top
root.wm_attributes("-topmost", True)
# Turn off the window shadow
root.wm_attributes("-transparent", True)
# Set the root window background color to a transparent color
root.config(bg='systemTransparent')

root.geometry("+300+300")

# Store the PhotoImage to prevent early garbage collection
root.image = tk.PhotoImage(file="photoshop-icon.gif")
# Display the image on a label
label = tk.Label(root, image=root.image)
# Set the label background color to a transparent color
label.config(bg='systemTransparent')
label.pack()

root.mainloop()

截屏

(在 macOS Sierra 10.12.21 上测试)

于 2017-05-31T23:21:34.393 回答
7

没有跨平台的方法可以在 tkinter 中仅使背景透明。

于 2013-09-30T12:45:44.793 回答
3

很简单:使用root.attributes()

在你的情况下,它就像root.attributes("-alpha", 0.5)0.5 是你想要的透明度,0 是完全透明的,1 是不透明的。

于 2013-09-29T17:03:16.730 回答
3

只需使用root.config(bg=''),仅此而已,例如:

from tkinter import *
root = Tk()
root.configure(bg='')
于 2021-08-22T08:29:48.717 回答
2

你可以这样做:window.attributes("-transparentcolor", "somecolor")

于 2017-09-19T15:57:37.073 回答
1

对于只做一个图像,您可以执行以下操作。

label = Label(root)
label.config(image='image.gif')
label.config(bg='systemTransparent')

这似乎允许 gif 和 alpha 通道发光,特别是在 macOS 上。

于 2020-03-07T23:14:27.003 回答
1

Linux 方式 - 安装pqiv

“Linux Way”似乎正在安装另一个软件包:

$ sudo apt install pqiv

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  pqiv
0 upgraded, 1 newly installed, 0 to remove and 11 not upgraded.
Need to get 34.6 kB of archives.
After this operation, 136 kB of additional disk space will be used.
Get:1 http://ca.archive.ubuntu.com/ubuntu xenial/universe amd64 pqiv amd64 2.2-1 [34.6 kB]
Fetched 34.6 kB in 0s (96.0 kB/s)
Selecting previously unselected package pqiv.
(Reading database ... 442035 files and directories currently installed.)
Preparing to unpack .../archives/pqiv_2.2-1_amd64.deb ...
Unpacking pqiv (2.2-1) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for mime-support (3.59ubuntu1) ...
Setting up pqiv (2.2-1) ...

但是,由于我必须xdotool为我的应用程序安装和其他软件包,还有什么是对的?另外,它会让码头工人高兴:)

好消息是它只有 136KB,并且会自动将启动画面放置在活动显示器的中心,而不是主显示器的中心或 X11 屏幕的中心(这在三个不同分辨率的显示器系统上看起来很有趣)。


打电话pqiv

从命令行(您可以在 Python 中使用os.popen()或轻松复制subprocess.Popen())您只需键入:

pqiv -c -c -i m.png

png这是我的图像的样子:

mserve 透明闪屏.gif


结束pqiv

在终端中,我必须在加载完成时发送Control+ 。C在 Python 中,您将不得不grep输出pskill作业。我想在 Linux 中非常简单,但对我们的 Windows 朋友来说可能很陌生。

归功于超级用户的回答

于 2021-06-16T00:19:03.077 回答
1

跨平台解决方案:

from sys import platform
import tkinter as tk
root = tk.Tk()

if platform == "linux" or platform == "linux2":
    root.overrideredirect(True)
    root.wait_visibility(root)
    root.wm_attributes("-alpha", 0.5)
elif platform == "darwin":
    root.overrideredirect(True)
    # Make the root window always on top
    root.wm_attributes("-topmost", True)
    # Turn off the window shadow
    root.wm_attributes("-transparent", True)
    # Set the root window background color to a transparent color
    root.config(bg='systemTransparent')
    root.geometry("+300+300")
    # Store the PhotoImage to prevent early garbage collection
    root.image = tk.PhotoImage(file="photoshop-icon.gif")
    # Display the image on a label
    label = tk.Label(root, image=root.image)
    # Set the label background color to a transparent color
    label.config(bg='systemTransparent')
    label.pack()
elif platform == "win32":
    root.image = tk.PhotoImage(file='startup.gif')
    label = tk.Label(root, image=root.image, bg='white')
    root.overrideredirect(True)
    root.geometry("+250+250")
    root.lift()
    root.wm_attributes("-topmost", True)
    root.wm_attributes("-disabled", True)
    root.wm_attributes("-transparentcolor", "white")
    label.pack()

root.mainloop()
于 2021-07-19T15:55:46.560 回答