我目前正在使用 Steam 的一款名为 Crosshair V2 的免费软件。它所做的只是在屏幕中间显示一个静态透明十字准线。我不喜欢这个软件,因为它没有太多自定义选项。
我想编写一个Python脚本,在屏幕中央和顶层显示一个透明的十字准线。
这是我的脚本,但它不起作用:
import tkinter as tk
from PIL import Image, ImageTk
IMAGE_PATH = "crosshair.png"
SIZE = 30
root = tk.Tk()
root.overrideredirect(True)
root.wm_attributes("-topmost", True)
root.wm_attributes("-transparentcolor", "white")
image = Image.open(IMAGE_PATH).convert("RGBA")
image = image.resize((SIZE, SIZE), Image.LANCZOS)
datas = image.getdata()
new_data = []
for item in datas:
if item[3] == 0: # Check for fully transparent pixels
new_data.append((255, 255, 255, 0)) # Keep them transparent
else:
new_data.append(item) # Keep other pixels unchanged
image.putdata(new_data)
photo = ImageTk.PhotoImage(image)
canvas = tk.Canvas(root, width=SIZE, height=SIZE, bg="white", highlightthickness=-0)
canvas.pack()
canvas.create_image(0, 0, anchor="nw", image=photo)
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - SIZE) // 2
y = (screen_height - SIZE) // 2
root.geometry(f"{SIZE}x{SIZE}+{x}+{y}")
root.mainloop()
此脚本的问题在于图像具有黑色背景而不是透明背景,并且十字准线内的白色像素突然变得透明。
有人可以帮我解决这个问题并给我写一个工作脚本吗?
我编写了一个不起作用的脚本
您只需将根窗口和画布的背景设置为黑色,并将
-transparentcolor
属性设置为 black
。你根本不需要PIL
。
这是更新后的代码:
import tkinter as tk
IMAGE_PATH = "crosshair.png"
SIZE = 30
root = tk.Tk()
root.overrideredirect(True)
root.wm_attributes("-topmost", True)
root.wm_attributes("-transparentcolor", "black")
photo = tk.PhotoImage(file = IMAGE_PATH)
canvas = tk.Canvas(root, width=SIZE, height=SIZE, bg="black", highlightthickness=0)
canvas.pack()
canvas.create_image(0, 0, anchor="nw", image=photo)
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - SIZE) // 2
y = (screen_height - SIZE) // 2
root.geometry(f"{SIZE}x{SIZE}+{x}+{y}")
root.mainloop()