【问题标题】:Python (2.*) Tkinter - Advanced Event Handling FormattingPython (2.*) Tkinter - 高级事件处理格式
【发布时间】:2023-03-25 16:33:01
【问题描述】:

我正在编写一个测试程序来使用 Python 2.* 在 Tkinter 窗口中检测鼠标运动。我可以创建必要的小部件并根据需要将适当的事件处理函数绑定到根小部件:

import Tkinter as tk

class App:

   def __init__(self, master=None):
      self.root = master
      self.frame = tk.Frame(master)
      self.frame.pack()
      self.create_widgets()
      self.setup_handlers()

   def create_widgets(self):
      ...

   def setup_handlers(self):
      self.root.bind('<Motion>', self.update)   # This is the line I wish to look at

   def update(self, event):
      ...

root = tk.Tk()
app = App(master=root)
root.mainloop()

我现在想做的是能够使用组合输入激活事件处理程序。例如,我希望能够仅在按住“r”键移动鼠标时激活事件处理程序。我需要什么事件字符串?在哪里可以找到有关绑定事件处理程序的事件字符串格式的完整概要?

【问题讨论】:

    标签: python tkinter event-handling


    【解决方案1】:

    对于组合事件处理,您可以执行以下操作:

    class App:
      holding = False
      def __init__(self, master):
        self.root = master
        self.root.bind("<KeyPress>", self.holdkey)
        self.root.bind("<KeyRelease>", self.releasekey)
    
      def holdkey(self, e):
        if e.char == "r" and not self.holding:
          self.root.bind("<Motion>", self.combined_update)
          self.holding = True
    
      def releasekey(self, e):
        if e.char == "r" and self.holding:
          self.root.unbind("<Motion>")
          self.holding = False
    
      def combined_update(self, e):
        # Event handling for the combined event.
        print ("yo")
    

    这“可能”会起作用。

    【讨论】:

    • 效果很好。不过,出于好奇,你知道我在哪里可以找到绑定字符串吗?我搜索过,找到了提供常用网站的网站,但我想知道在哪里可以找到所有这些网站(供将来参考...)
    • 我想我真正想知道的是是否支持组合事件绑定字符串。因为听起来执行嵌套绑定语句会在一段时间后变得相当复杂(特别是如果我们有不同的&lt;Motion&gt; 事件处理取决于来自&lt;KeyPress&gt; 处理程序的按下键)。我了解 TK 支持用户定义的名为“虚拟事件”。 Tkinter 是否以任何方式支持这一点?
    • 我明白你想要达到的目的,只是想把它放在这里,以防你可以取消绑定特定事件,只需将回调分配给一个变量。如果你这样做var = root.bind("&lt;Motion&gt;", func),您可以通过 root.unbind("Motion", var) 专门取消绑定这个
    • @S.Gamgee:支持组合事件,但我不确定组合键和鼠标事件是否按您期望的方式工作。例如,“按住按钮”没有事件序列——您可以在按下或释放时绑定,但不能在保持时绑定。另外,不同的硬件系统以不同的方式处理长按(有些会按照您的预期执行并发送单个按下和释放事件,有些键盘会发送稳定的按下/释放对流) FWIW,tkinter 事件的规范描述在 tcl/tk文档:tcl.tk/man/tcl8.5/TkCmd/bind.htm
    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多