python - 如何使用 python 使点击事件通过窗口?
问题描述
我想在我的屏幕上添加叠加层,使用 python 显示一些形状,我试图通过使窗口透明并让点击事件通过窗口来实现这一点。我正在使用 python 3.6(如果需要,我可以更改版本)并且我在 Windows 10 上。
注意:过去在这里和这里都提出过类似的问题,但都没有回答我的问题。
提前致谢
解决方案
Tkinter 没有将事件传递给父小部件。但是可以通过使用来模拟效果 bindtags
绑定到小部件不等于添加绑定到小部件。它绑定到bindtag
与小部件同名的 a,但它实际上不是小部件。
小部件有一个列表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()
推荐阅读
- python - 如何使用 Python 将子网关联到 Azure 中的网络安全组?
- docker - 无法连接到主机中的 minikube 服务
- flutter - 无法从捕获的文本文件中捕获翻译的文本
- apache-spark - 如何正确分隔列
- python - 并发期货 - 提取文件名以及输出
- teamcity - Teamcity 不会针对 PR 的更改一致地触发构建
- r - 如何将具有大量数据的类从因子更改为最新?
- html - 如何在不链接 a href 的情况下转到关于页面?
- unit-testing - ARM项目中x86上的CMake UnitTest
- sql - 为用户定义的域类型定义排序方案