【问题标题】:Python - Tkinter how to create transparent background responding to click eventsPython - Tkinter 如何创建响应点击事件的透明背景
【发布时间】:2021-01-03 17:00:00
【问题描述】:

当我的透明背景被点击时,我需要关闭我的程序,但问题是 TKinter 不会记录对任何透明项目的点击,除非它们下方有像 question 这样的东西。

如果我这样做了

from tkinter import *

firstTime = True

def backgroundClicked(event):
    if firstTime == False:
        print("clicked")
        quit()

window = Tk("Dynamic CheatSheet")
window.configure(bg="red")
window.attributes("-transparentcolor", "red")
window.geometry("500x500")

masterFrame = Frame(window, width=500, height=500, bg="red")
masterFrame.pack()
masterFrame.bind('<Button-1>', backgroundClicked)

firstTime = False

window.mainloop() 

然后单击它不起作用的背景,但如果我将背景设置为实心,那么绑定就像一个魅力(尝试更改为例如“黄色”)。

另外wm_attributes('-alpha', 0.0) 对我不起作用,因为我只希望部分 UI 是透明的。

我也考虑过使用 pynput 来注册每次点击,但我无法让它与 tkinter 同时工作。

所以 TLDR 我想让我的透明背景在 tkinter 中注册点击,但我不知道该怎么做。

感谢您的任何回复。

【问题讨论】:

  • listener = pynput.keyboard() ; listener.start() ; window.mainloop() ; listener.join()

标签: python windows tkinter


【解决方案1】:

我不知道如何解决透明颜色的问题。另外我用的Linux没有这个选项。

但是运行 pynput 和 tkinter 应该没有问题 - 因为pynput 在单独的线程中运行。

listener = keyboard.Listener(on_press=on_press, on_release=on_release)
listener.start()

window.mainloop() 

linstener.join()

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:

    window.mainloop() 

    listener.join()

【讨论】:

  • 看起来它现在可以工作,但我还有另一个问题。当我在 on_click() 中使用 Destroy 函数时,我的光标将有几秒钟的可见输入延迟。我不明白为什么会发生这种情况。使用 destroy 函数时,如果它在 pynput 之外,它会正常工作。
  • 我不知道可能是什么问题,但我会添加即。 print(time.time) 在命令之间查看哪个命令需要更多时间来执行。也许问题是你如何停止listener。也许你还需要listener.stop()。听众使用thread,这可能需要时间来阻止它。
猜你喜欢
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2021-03-11
  • 2019-03-31
  • 2012-05-14
相关资源
最近更新 更多