如何将键盘事件绑定到PythonTKMessageBox?

2024-06-01 06:10:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个小的GUI应用程序,它需要使用无线演示器指针,它只有两个键:左箭头和右箭头。我可以将键盘事件“Left”和“Right”绑定到根(主窗口)并调用一个函数,因此我的应用程序的大部分工作正常。在

但是当我需要用tkMessageBox弹出一个消息框来显示一些信息时,用键盘单击“确定”按钮的唯一方法是按“空格键”,这在我的演示者指针上不存在。这意味着当弹出这样一个消息框时,演示者必须进入计算机,要么用鼠标单击“确定”按钮,要么用键盘单击“空格”键。在

有没有办法让我在弹出这样一个消息框时,将“左箭头”或“右箭头”临时绑定到“确定”按钮上,然后将这两个键的绑定恢复到原来的“点击”功能?在


Tags: 函数right信息应用程序消息事件gui箭头
1条回答
网友
1楼 · 发布于 2024-06-01 06:10:46

由于tkMessageBox不是一个对象,而是一个tcl调用,所以不能这么容易地重载绑定。只是子类Tkinter.框架获取可以绑定键的对象。在

子类化仍然可以遵循MessageBox的外观。在

例如

#!/usr/bin/python
import Tkinter

class MyBox(Tkinter.Toplevel):
    def __init__(self, *args, **kwargs):
        Tkinter.Toplevel.__init__(self, *args, **kwargs)
        self.__text = Tkinter.StringVar()
        self.__text.set("Initialized Text")
        Tkinter.Label(self, textvariable = self.__text).grid(row=0, column=0, columnspan=3, sticky=Tkinter.NW+Tkinter.SE)
        Tkinter.Button(self, text="OK", command=self.release_func).grid(row=1, column=1, sticky=Tkinter.NW+Tkinter.SE)
        self.bind_all("&ltKeyRelease&gt", self.release_func)
        self.grid()
        self.focus_set()
    def set_text(self, text="NoText"):
        self.__text.set(text)
        self.focus_set()
    def release_func(self, event=None):
        # event=None necessary as we also use button binding.
        self.destroy()

root = Tkinter.Tk()
messagebox = MyBox()
messagebox.set_text("Show this message")
root.mainloop()

相关问题 更多 >