微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tkinter透视窗口不受鼠标单击的影响

如何解决Tkinter透视窗口不受鼠标单击的影响

您可以使用模块的SetwindowLong功能win32gui。如果您想要透明的点击后进入窗口,则只能在GWL_EXSTYLE我们的窗口中应用。因此,您需要Window的windowhandle。

hwnd = win32gui.FindWindow(None, "Your window title") # Getting window handle
# hwnd = root.winfo_id() getting hwnd with Tkinter windows
# hwnd = root.GetHandle() getting hwnd with wx windows
lExStyle = win32gui.getwindowlong(hwnd, win32con.GWL_EXSTYLE)
lExStyle |=  win32con.WS_EX_TRANSPARENT | win32con.WS_EX_layered
win32gui.SetwindowLong(hwnd, win32con.GWL_EXSTYLE , lExStyle )

如果您想通过winapi使用来更改窗口的透明度SetlayeredWindowAttributes

编辑:用于通过单击单击的始终处于顶部的透明窗口的叠加层的示例代码。它获取当前的桌面图像并创建透明的覆盖层,因此您可以欣赏桌面背景图像。

from win32api import GetSystemMetrics
import win32con
import win32gui
import wx


def scale_bitmap(bitmap, width, height):
    image = wx.ImageFromBitmap(bitmap)
    image = image.Scale(width, height, wx.IMAGE_QUALITY_HIGH)
    result = wx.BitmapFromImage(image)
    return result

app = wx.App()
trans = 50
# create a window/frame, no parent, -1 is default ID
# change the size of the frame to fit the backgound images
frame1 = wx.Frame(None, -1, "KEA", style=wx.CLIP_CHILDREN | wx.STAY_ON_TOP)
# create the class instance
frame1.ShowFullScreen(True)
image_file = win32gui.SystemParametersInfo(win32con.SPI_GETDESKWALLPAPER,0,0)
bmp1 = wx.Image(image_file, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
bmp1 = scale_bitmap(bmp1,GetSystemMetrics(1)*1.5,GetSystemMetrics(1))
bitmap1 = wx.StaticBitmap(frame1, -1, bmp1, (-100, 0))
hwnd = frame1.GetHandle()

extendedStyleSettings = win32gui.getwindowlong(hwnd, win32con.GWL_EXSTYLE)
win32gui.SetwindowLong(hwnd, win32con.GWL_EXSTYLE, extendedStyleSettings  | win32con.WS_EX_layered | win32con.WS_EX_TRANSPARENT)
win32gui.SetlayeredWindowAttributes(hwnd, 0, 255, win32con.LWA_ALPHA)

frame1.SetTransparent(trans)


def onKeyDown(e):
    global trans
    key = e.GetKeyCode()
    if  key==wx.WXK_UP:
        print trans
        trans+=10
        if trans >255:
            trans = 255
    elif key==wx.WXK_DOWN:
        print trans
        trans-=10
        if trans < 0:
            trans = 0
    try:
        win32gui.SetlayeredWindowAttributes(hwnd, 0, trans, win32con.LWA_ALPHA)
    except:
        pass
frame1.Bind(wx.EVT_KEY_DOWN, onKeyDown)

app.MainLoop()

您可以使用向上/向下箭头键动态更改透明度。注意,窗口框架是用“ wx”创建的,但也应该与tkinter一起使用。

随意使用您喜欢的代码

解决方法

我目前正在通过发送鼠标和击键命令来用python控制游戏。我要做的是在游戏上方放置一个透明的Tkinter窗口,以提供一些信息,例如鼠标位置和像素颜色。

我熟悉如何更改窗口的alpha属性以使其透明,但不知道如何始终将窗口置于前面并让鼠标单击通过。

我目前控制游戏的方法包括在某些位置截取屏幕截图并分析颜色内容。我还将需要某种方式来做到这一点,而不会干扰Tkinter窗口。

Pyscreenshot用于截屏win32api用于单击

谢谢亚历克

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。