我正在开发一个小型GUI应用程序,它需要使用无线演示器指针,该指针只有两个键:左箭头和右箭头。我可以绑定键盘事件" Left"和#34;对"到根(主窗口)并调用一个函数,所以我的应用程序的大部分工作正常。
但是当我需要弹出一个带有tkMessageBox的消息框来显示一些信息时,唯一可以点击" OK"带键盘的按钮是按"空格",我的演示者指针上没有。这意味着当弹出这样的消息框时,演示者必须去计算机点击" OK"鼠标按钮,或"空格"用键盘键。
有没有办法允许我暂时绑定"左箭头"或"右箭头"到" OK"弹出这样的消息框时按钮然后将两个键的绑定恢复到原来的on_click函数?
答案 0 :(得分:1)
由于tkMessageBox不是一个对象而是一个tcl调用,因此不能重载那么简单的绑定。只需将Tkinter.Frame子类化,即可获得一个可以绑定键的对象。
但是,子类可以遵循MessageBox的外观和感觉。
e.g。
#!/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()