我希望在用户屏幕上创建视觉提示,但是我发现找不到一个简单的解决方案,如何在屏幕上直接进行基本绘图而不限制用户操作(使用Python 3.x在Windows下)。
经过搜索,我唯一找到的 - 不完全有效的 - 解决方案是使用wxPython。以下是代码:
import wx
# init
app=wx.App()
dc=wx.ScreenDC()
# set line and fill style
dc.SetBrush(wx.TRANSPARENT_BRUSH)
dc.SetPen(wx.Pen((255, 0, 0), width=3, style=wx.PENSTYLE_SOLID))
# draw (x, y, width, height)
dc.DrawRectangle(100, 100, 200, 100)
代码在屏幕上绘制,但由于Windows快速重新绘制屏幕,结果几乎不可见。我尝试了一个解决方法,使用for循环重复绘图命令,但是闪烁的矩形几乎不可见(这不是我想向客户展示的内容)。
更好一点(接近足够)的方法是使用一个透明的TKinter窗口(没有标题栏),并将其显示一段较短的时间。以下是该方法的工作代码(有一个缺点,在代码下面进行了解释):
from tkinter import *
def HighlightSection(Rect=(100,100,300,200), Color = 'red', Duration = 3):
win= Tk()
GeometryString = str(Rect[0])+'x'+str(Rect[1])+'+' \
+str(Rect[2])+'+'+str(Rect[3])
win.geometry(GeometryString) # "200x100+300+250" # breite, höhe, x, y #
win.configure(background=Color)
win.overrideredirect(1)
win.attributes('-alpha', 0.3)
win.wm_attributes('-topmost', 1)
win.after(Duration * 1000, lambda: win.destroy())
win.mainloop()
这里有一件事情我无法解决:有没有办法使得TKinter“窗口”可以被点击穿过?如果能够实现这一点,那么这就足够好了。只要不是点击穿透,用户就无法在/在高亮区域下进行操作!
有没有简单而稳定的解决方案,可以在屏幕上绘制(线条、矩形、文本)并在定义的时间后将其清除?任何帮助都将不胜感激!提前感谢您,Ulrich!
Pygame
库? - Rishabh Semwal