【问题标题】:tkinter get <ButtonRelease-1> when resizing windowtkinter 在调整窗口大小时获取 <ButtonRelease-1>
【发布时间】:2016-10-27 12:27:54
【问题描述】:

我正在画布上绘制图片库。调整窗口大小后,我需要重新绘制图库。
我可以绑定&lt;configure&gt; 事件以获取调整大小通知。但是通过拖动鼠标调整窗口大小会产生太多事件。我想存储更改并仅在释放鼠标按钮时重绘图库。
问题: 我找不到在 Windows 边框上获取新闻或发布事件的方法。
这是可能的还是边框实际上不是窗口的一部分?

【问题讨论】:

  • 两个回调怎么样:当你调整大小时,你设置一个标志resizing为真,然后当鼠标按钮被释放时,你检查那个标志是否为真。如果是,则再次将其设置为 false 并执行您的操作。
  • 这正是我想要做的。正如我所写,在窗口边框(拖动以更改窗口大小)上释放鼠标按钮似乎不会创建释放事件。

标签: python tkinter


【解决方案1】:

如果用户在窗口边框上单击鼠标,则无法知道用户何时释放鼠标。边框不是窗口的一部分,Tkinter 对其创建的小部件之外的事件知之甚少。

最简单的解决方案可能是延迟重绘。在&lt;Configure&gt; 事件中,取消任何挂起的重绘,并安排新的重绘在一两秒内发生。

class Application(...):
    def __init__(self, ...):
        ...
        self._after_id = None
        self.bind("<Configure>", self.schedule_redraw)
        ...

    def schedule_redraw(self, event):
        if self._after_id:
            self.after_cancel(self._after_id)
        self._after_id = self.after(2000, self.redraw)

【讨论】:

  • 谢谢!我正在通过从线程轮询来做类似的事情。函数后的 Tkinters 看起来要简单得多。感谢您回答有关边界的实际问题。
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 2018-03-01
  • 2013-02-22
  • 1970-01-01
  • 2012-07-29
  • 2021-05-26
相关资源
最近更新 更多