我正在嘗試在螢屏上顯示影像,但沒有任何視窗/應用程式彈出/包含它。我與 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()
該-transparentcolor標志主要去除背景,但如果影像具有任何部分透明的像素,它將對其進行著色。另外,如果影像中存在該顏色,它將被洗掉;這種顏色的選擇是希望盡量減少影像中的精確匹配,同時也主要是白色,希望對影像的影響最小。這是它目前的樣子;非常接近我想要的,但是您可以在骰子的白色區域看到一些缺失的像素,并且由于它們的邊緣部分透明,它們周圍似乎都有一個白色邊框。這就是影像的外觀。
我也嘗試過使用 wxPython 來實作這種效果,但我無法移除視窗的背景,導致透明影像總是被某種顏色支持。我用了這個答案;我已經稍微修改了它,但我所做的一切都沒有改善它。
那么,有沒有一種方法可以在沒有任何背景的情況下使用 Python 在螢屏上繪制影像?
uj5u.com熱心網友回復:
感謝 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_())
有一次我在找PyQt5,發現了這個問題,只需要稍微修改一下代碼。這是它現在的樣子。
uj5u.com熱心網友回復:
那么,有沒有一種方法可以在沒有任何背景的情況下使用 Python 在螢屏上繪制影像?
使用 Tkinter,對于此影像,不,您無法達到預期的結果。(您可以尋找其他模塊,例如“PyQT5”、“Kivy”、“wxPython”或“turtle”。)
請參閱,transparentcolor指定頂層的透明顏色索引。
如果您想在 Tkinter 中做到最好,請對您的代碼進行以下更改:
root.attributes('-transparentcolor', '#d4d4e2')
root.attributes("-topmost", True)
tk_img = tk.PhotoImage(file="image.png")
canvas = tk.Canvas(root, bg="#d4d4e2", bd=0, highlightthickness=0, width=screen_size[0], height=screen_size[1])
因此,這將顯示一個包含透明背景畫布的視窗。非常接近您想要的,您可以在骰子的白色區域看到非常少的丟失像素,但這仍然不是解決方案。
但如果影像有任何部分透明的像素,它會將它們著色
是的,這是真的,如果影像中存在該顏色,它將被洗掉,因為該顏色用于標記需要用作透明顏色的內容。
這種顏色的選擇是希望最大限度地減少影像中的精確匹配,同時也主要是白色,希望對影像產生最不明顯的影響。
為了使該影像的邊緣/邊框保留部分“白色”透明背景,顏色的選擇需要是某種“白色”陰影。因此,用于使其透明的顏色是#d4d4e2(對于這張圖片,只有一個地方使用了這個顏色像素,所以它不會被注意到。)但是,邊緣會有尖角和切口。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441030.html
標籤:Python tkinter wxpython tkinter-canvas
下一篇:動態獲取哪個按鈕使用功能
