【问题标题】:how could I make click events pass through a window using python?如何使用 python 使点击事件通过窗口?
【发布时间】:2020-05-31 13:36:19
【问题描述】:

我想在我的屏幕上添加叠加层,使用 python 显示一些形状,我试图通过使窗口透明并让点击事件通过窗口来实现这一点。我正在使用 python 3.6(如果需要,我可以更改版本)并且我在 Windows 10 上。

注意:过去herehere曾提出过类似的问题,但都没有回答我的问题。

提前致谢

【问题讨论】:

  • 你可以有一个canvas 然后配置为window 调整bindtags 到子画布。然后为内部画布上的按钮单击事件添加回调。
  • 您使用的是什么 GUI 工具包?
  • @BryanOakley 我正在使用 pyautogui

标签: python window


【解决方案1】:

Tkinter 没有将事件传递给父小部件。但是可以通过bindtags来模拟效果

绑定到小部件不等于添加绑定到小部件。它绑定到与小部件同名的bindtag,但它实际上不是小部件。

小部件有一个bindtags 列表,当小部件上发生事件时,会处理每个标签的绑定。

import Tkinter as tk

class BuildCanvas(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        self.main = tk.Canvas(self, width=250, height=250, 
                              borderwidth=0, highlightthickness=0,
                              background="linen")
        self.main.pack(side="top", fill="both", expand=True)

        self.main.bind("<1>", self.on_main_click)

        for x in range(10):
            for y in range(10):
                canvas = tk.Canvas(self.main, width=35, height=35, 
                                   borderwidth=1, highlightthickness=0,
                                   relief="groove")
                if ((x+y)%2 == 0):
                    canvas.configure(bg="yellow")

                self.main.create_window(x*45, y*45, anchor="nw", window=canvas)

                bindtags = list(canvas.bindtags())
                bindtags.insert(1, self.main)
                canvas.bindtags(tuple(bindtags))
                canvas.bind("<1>", self.on_sub_click)


    def on_sub_click(self, event):
        print("sub-canvas binding")
        if event.widget.cget("background") == "yellow":
            return "break"

    def on_main_click(self, event):
        print("main widget binding")

if __name__ == "__main__":
    root = tk.Tk()
    BuildCanvas(root).pack (fill="both", expand=True)
    root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多