簡體   English   中英

如何使用 python 使點擊事件通過 window?

[英]how could I make click events pass through a window using python?

我想使用 python 向我的屏幕添加顯示一些形狀的疊加層,我試圖通過使 window 透明並使點擊事件通過 window 來實現這一點。 我正在使用 python 3.6(如果需要,我可以更改版本)並且我在 windows 10 上。

注意:過去在這里這里都提出過類似的問題,但都沒有回答我的問題。

提前致謝

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM