用户在模态窗口外单击时如何响铃?

罗纳德

情况很简单。我有一个带有“帮助-关于”菜单的主窗口。单击此菜单项时,将打开一个模式窗口(假设它是“关于”窗口)。随着self.grab_set()我关闭主窗口(虽然模态窗口确实当您单击主标题栏闪烁)。到现在为止还挺好。

这里的问题是:当用户在主窗口上的模态窗口外单击时,我真的很想发出铃声。

这是我可以找到的关于grab_set()的信息,实际上并不多:

  • [effbot] ...一种称为grab_set的方法,该方法可确保没有将鼠标或键盘事件发送到错误的窗口。
  • [effbot]将此应用程序的所有事件路由到此窗口小部件。
  • [kite.com]抓取将所有事件定向到应用程序中的此小部件和后代小部件。
  • [Google图书] grab_set()确保将应用程序的所有事件发送到w,直到对catch_release进行相应调用([Me:]或直到窗口被销毁为止)。

我不太确定该如何理解:这是否意味着您可以在模态窗口内的主窗口上处理一个事件(就像敲响我的钟声一样)?所以我尝试了类似的事情:

self.bind('<Button-1>', self.bell)例外Tkinter的回调:_tkinter.TclError:坏窗口路径名parent.bind('<Button-1>', self.bell)无反应

那么,像在许多其他应用程序中一样,如何在主窗口的模态窗口之外单击时发出铃声?

派生问题

  • 在模式窗口使用grab_set之后,仍然可以从主窗口触发事件吗?
  • 有没有办法防止闪烁?

我真的很想了解这种神秘的grab_set()方法。

剥离代码:

import tkinter as tk

class About(tk.Toplevel):
    def __init__(self, parent):
        tk.Toplevel.__init__(self, parent)
        self.geometry('200x150')

        #--- OK button
        btn_ok = tk.Button(self, text='OK', command=self.destroy)  # destroy with OK
        btn_ok.pack(side=tk.TOP)
        btn_ok.focus()                                             # destroy with spacebar

        #--- Make window modal
        self.grab_set()                 
        # self.wait_window()              # is this necessary in this case?
        # self.bind('<Button-1>', self.bell) ??? The question

class MenuBar(tk.Menu):
    def __init__(self, parent):
        tk.Menu.__init__(self)
        helpmenu = tk.Menu(self, tearoff=0)
        helpmenu.add_command(label='About', command=lambda: About(parent))
        self.add_cascade(label='Help', menu=helpmenu)

class MainApp():
    def __init__(self, parent):
        parent.configure(background='#000000')
        parent.geometry('800x600')
        menubar = MenuBar(parent)
        parent.configure(menu=menubar)

if __name__ == '__main__':
    root = tk.Tk()
    MainApp(root)
    root.mainloop()
布莱恩·奥克利(Bryan Oakley)

设置抓取时,所有按钮单击都将转到带有抓取的窗口。您以捕获其他事件的方式捕获它们。如果单击按钮,可以通过将功能绑定到来实现<1>

重要的是要知道,在一个根窗口或一个Toplevel窗口上的绑定将应用于该窗口中的所有窗口小部件。例如,self即使您单击“确定”按钮,也会绑定到代码中。因此,仅当与事件关联的窗口小部件与顶级相同时,回调才可能起作用。

例:

class About(tk.Toplevel):
    def __init__(self, parent):
        ...
        self.bind("<1>", self.capture_click)
        ...
    def capture_click(self, event):
        if event.widget == self:
            <your logic here>

在想知道用户是否在窗口外部单击时,可以使用事件对象的坐标与窗口进行比较,以查看该单击是在内部还是外部。

    def on_click(self, event):
        if event.widget == self:
            if (event.x < 0 or event.x > self.winfo_width() or
                event.y < 0 or event.y > self.winfo_height()):
                self.bell()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Angular的模态窗口外启用单击,选择等操作

来自分类Dev

单击模式窗口外时重置 Bootstrap 模式

来自分类Dev

在此窗口外部单击时,如何禁用自动最小化窗口?我正在使用Xubuntu 14.04

来自分类Dev

窗口外壳启动时如何启动FileSystemWatcher

来自分类Dev

用户单击“保存”时清除模态数据

来自分类Dev

用户单击窗口中的任意位置时如何删除键盘?

来自分类Dev

手机响铃时的窗口覆盖

来自分类Dev

停止在窗口外部单击时关闭引导程序模式吗?

来自分类Dev

AmCharts XY 图表 - 如何在 Angular 中单击时获得模态弹出窗口?

来自分类Dev

如何根据 v-for 值在模态窗口(单击按钮时)上获取所选数据?

来自分类Dev

当用户在 JQuery UI 中的模态对话框之外单击时,如何防止模态对话框关闭?

来自分类Dev

仅当用户单击关闭btn时如何关闭Materialized模态?

来自分类Dev

单击“ Asp按钮”控件时显示Bootstrap模态弹出窗口

来自分类Dev

Bootstrap:在循环中单击图像时显示模态窗口

来自分类Dev

单击任何链接时 Javascript 关闭模态窗口

来自分类Dev

窗口焦点“卡住” - 无法在窗口外单击

来自分类Dev

如何调用jqgrid行上的模态窗口单击?

来自分类Dev

引导弹出窗口:当光标移到窗口外时隐藏

来自分类Dev

您如何提醒视障用户正在显示模态窗口?

来自分类Dev

用户单击浏览器操作并弹出窗口时如何执行操作(Chrome扩展程序)

来自分类Dev

用户单击关闭选项卡时如何打开新窗口浏览器?

来自分类Dev

用户单击其他图钉时如何关闭上一个信息窗口?

来自分类Dev

在EXTJS的“模态”窗口中单击按钮时,在主窗口中重新加载存储/刷新网格

来自分类Dev

MVC 5 Razor中的自举模态:当用户单击模态中的继续按钮时,如何将模型布尔值更新为false?

来自分类Dev

如何通过触摸窗口外部关闭弹出窗口?

来自分类Dev

当用户单击弹出窗口表面之外的页面上的任何位置时,如何关闭动态添加的弹出窗口?

来自分类Dev

当用户在模式窗口之外单击时,如何使用jquery关闭w3schools示例中的模式窗口?

来自分类Dev

如何修复模态窗口?

来自分类Dev

如何在单击时打开剑道窗口

Related 相关文章

  1. 1

    在Angular的模态窗口外启用单击,选择等操作

  2. 2

    单击模式窗口外时重置 Bootstrap 模式

  3. 3

    在此窗口外部单击时,如何禁用自动最小化窗口?我正在使用Xubuntu 14.04

  4. 4

    窗口外壳启动时如何启动FileSystemWatcher

  5. 5

    用户单击“保存”时清除模态数据

  6. 6

    用户单击窗口中的任意位置时如何删除键盘?

  7. 7

    手机响铃时的窗口覆盖

  8. 8

    停止在窗口外部单击时关闭引导程序模式吗?

  9. 9

    AmCharts XY 图表 - 如何在 Angular 中单击时获得模态弹出窗口?

  10. 10

    如何根据 v-for 值在模态窗口(单击按钮时)上获取所选数据?

  11. 11

    当用户在 JQuery UI 中的模态对话框之外单击时,如何防止模态对话框关闭?

  12. 12

    仅当用户单击关闭btn时如何关闭Materialized模态?

  13. 13

    单击“ Asp按钮”控件时显示Bootstrap模态弹出窗口

  14. 14

    Bootstrap:在循环中单击图像时显示模态窗口

  15. 15

    单击任何链接时 Javascript 关闭模态窗口

  16. 16

    窗口焦点“卡住” - 无法在窗口外单击

  17. 17

    如何调用jqgrid行上的模态窗口单击?

  18. 18

    引导弹出窗口:当光标移到窗口外时隐藏

  19. 19

    您如何提醒视障用户正在显示模态窗口?

  20. 20

    用户单击浏览器操作并弹出窗口时如何执行操作(Chrome扩展程序)

  21. 21

    用户单击关闭选项卡时如何打开新窗口浏览器?

  22. 22

    用户单击其他图钉时如何关闭上一个信息窗口?

  23. 23

    在EXTJS的“模态”窗口中单击按钮时,在主窗口中重新加载存储/刷新网格

  24. 24

    MVC 5 Razor中的自举模态:当用户单击模态中的继续按钮时,如何将模型布尔值更新为false?

  25. 25

    如何通过触摸窗口外部关闭弹出窗口?

  26. 26

    当用户单击弹出窗口表面之外的页面上的任何位置时,如何关闭动态添加的弹出窗口?

  27. 27

    当用户在模式窗口之外单击时,如何使用jquery关闭w3schools示例中的模式窗口?

  28. 28

    如何修复模态窗口?

  29. 29

    如何在单击时打开剑道窗口

热门标签

归档