Joh*_*ohn 5 python wxpython tkinter tkinter-canvas
我试图在屏幕上显示图像,而不弹出/包含任何窗口/应用程序。我对 TKinter 非常熟悉,但删除画布背景颜色的方法很糟糕,并且会产生一些不良效果。
import tkinter as tk
import ctypes
user32 = ctypes.windll.user32
screen_size = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
root = tk.Tk()
root.overrideredirect(True)
root.config(bg="blue", bd=0, highlightthickness=0)
root.attributes("-transparentcolor", "#FEFCFD")
root.attributes("-topmost", True)
tk_img = tk.PhotoImage(file="image.png")
canvas = tk.Canvas(root, bg="#FEFCFD", bd=0, highlightthickness=0, width=screen_size[0], height=screen_size[1])
canvas.pack()
img = canvas.create_image(0, 0, image=tk_img, anchor="nw")
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
该-transparentcolor标志主要删除背景,但如果图像有任何部分透明的像素,它会给它们着色。另外,如果图像中存在该颜色,它将被删除;这种颜色的选择是希望最大限度地减少图像中的精确匹配,同时也以白色为主,希望对图像产生最不明显的影响。这是它当前的样子;非常接近我想要的,但是您可以在骰子的白色区域中看到一些丢失的像素,并且由于它们的边缘部分透明,它们周围似乎都有白色边框。这就是图像应该的样子。
我也尝试过使用 wxPython 来实现这种效果,但我无法删除窗口的背景,导致透明图像总是由某种颜色支持。我用了这个答案;我稍微修改了它,但我所做的一切都没有改善它。
那么,有没有一种方法可以用Python在屏幕上绘制完全没有背景的图像呢?
感谢 Kartikeya 的建议,我能够解决我自己的问题。
使用 PyQt5,此代码将显示透明且完全没有边框或背景的图像
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel
app = QApplication(sys.argv)
window = QMainWindow()
window.setAttribute(Qt.WA_TranslucentBackground, True)
window.setAttribute(Qt.WA_NoSystemBackground, True)
window.setWindowFlags(Qt.FramelessWindowHint)
label = QLabel(window)
pixmap = QPixmap('image.png')
label.setPixmap(pixmap)
label.setGeometry(0, 0, pixmap.width(), pixmap.height())
window.label = label
window.resize(pixmap.width(),pixmap.height())
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
有一次我在寻找PyQt5时,发现了这个问题,只需要稍微修改一下代码即可。这是现在的样子。