0

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

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

当弹出这样的消息框时,有什么方法可以让我暂时将“左箭头”或“右箭头”绑定到“确定”按钮,然后将两个键的绑定恢复到原来的 on_click 函数?

4

1 回答 1

1

由于 tkMessageBox 不是一个对象,而是一个 tcl 调用,所以您不能那么容易地重载绑定。只需继承 Tkinter.Frame 即可获得可以绑定键的对象。

尽管如此,子类化仍可以遵循 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("<KeyRelease>", 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()
于 2018-01-18T15:10:28.230 回答