Python Tkinter GUI 绑定 'Return' 以运行
Python Tkinter GUI bind 'Return' to function
我无法弄清楚如何将 'Enter' 键与功能或更具体地说是按钮绑定。我想将 'Enter' 键与 self.search 函数绑定。我有下面的代码,我尝试了很多不同的方法。现在它只是清除输入框。任何帮助将不胜感激。
class MainGUI:
def __init__(self, master):
self.master = master
master.minsize(width=500, height=175)
master.title("Serial Number Decode")
self.label = Label(master, text="Serial Number Decoder")
self.label.pack()
self.textBox=Text(master, height=1, width=30)
self.textBox.place(relx=0.5, rely=0.1, anchor='n')
self.textBox2=Text(master, height=2, width=50,font=("Sans",12))
self.textBox2.place(relx=0.5, rely=0.5, anchor='s')
self.search_button = Button(master, text="Search", command=self.search)
self.search_button.place(relx=0.75, rely=0.15, anchor='w')
#self.search_button.bind('<Return>', self.search)
self.master.bind('<Return>', self.search) #Just clears the entry box
self.multiLook_button = Button(master, text="MultiLook", command=self.multiLook)
self.multiLook_button.place(relx=0.7, rely=0.6, anchor='w')
self.multiSearch_button = Button(master, text="MultiSearch", command=self.multiSearch)
self.multiSearch_button.place(relx=0.84, rely=0.6, anchor='w')
self.close_button = Button(master, text="Close", command=master.quit)
self.close_button.place(relx=0.85, rely=0.15, anchor='w')
你走在正确的轨道上,假设你在 class 中定义了 search
,像这样:
class MainGUI():
def __init__(self, master):
# ... Code ...
def search(self, event):
# ... Code ...
您可以直接访问该方法:
self.search_button.bind('<Return>', self.search)
使用这种方法,search_button
小部件必须具有焦点,以便在按下 Enter 时触发事件绑定。
此外,我将建议一种不同的方式来构建您的应用程序,这将有助于增加代码的可读性,并允许更轻松地扩展,例如如果您想在将来添加到应用程序中。最好在开发 GUI 时采取有条不紊的方法,即系统化或循序渐进 - 模块化可以帮助实现这一点。
import tkinter as tk
class MainGUI(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.minsize(width=500, height=175)
self.master.title("Serial Number Decode")
self.main_label()
self.text_boxes()
self.buttons()
def main_label(self):
self.label = tk.Label(self, text='Serial Number Decoder')
self.label.pack()
def text_boxes(self):
# First we create the widgets
self.textBox = tk.Text(self, height=1, width=30)
self.textBox2 = tk.Text(self, height=2, width=50, font=("Sans",12))
# Next place them within the GUI
self.textBox.place(relx=0.5, rely=0.1, anchor='n')
self.textBox2.place(relx=0.5, rely=0.5, anchor='s')
def buttons(self):
self.search_button = tk.Button(self, text="Search", command=self.search)
# You can set a widget to have the 'focus' like so:
self.search_button.focus()
# And bind an event on focus in, focus out, enter, shift, etc. - e.g.:
self.search_button.bind('<FocusIn>', self.do_something)
self.search_button.bind('<FocusOut>', self.do_something_else)
self.search_button.bind('<Return>', self.search)
# Other buttons below...
def search(self, event=None):
# Do something now that the event has been triggered
有几件事需要注意 - def search(self, event=None)
,我在这里为事件关键字参数提供默认值 None
,因为如果单击按钮(根据设置 command=self.search
), 'event' 将 不 传递给该方法,但是如果该方法是从绑定触发的,则 'event' 将被传递。另外,我的代码示例不是很详尽,我编写了一些代码并对其进行了结构化,纯粹是为了举例,例如我没有在 GUI 中注册搜索按钮,所以它不会出现,或者 self.do_something
没有定义所以 运行 这实际上会引发一个 AttributeError
。我希望这一切都有帮助!最后这里有一个很好的 tkinter 资源,NMT Tkinter.
我无法弄清楚如何将 'Enter' 键与功能或更具体地说是按钮绑定。我想将 'Enter' 键与 self.search 函数绑定。我有下面的代码,我尝试了很多不同的方法。现在它只是清除输入框。任何帮助将不胜感激。
class MainGUI:
def __init__(self, master):
self.master = master
master.minsize(width=500, height=175)
master.title("Serial Number Decode")
self.label = Label(master, text="Serial Number Decoder")
self.label.pack()
self.textBox=Text(master, height=1, width=30)
self.textBox.place(relx=0.5, rely=0.1, anchor='n')
self.textBox2=Text(master, height=2, width=50,font=("Sans",12))
self.textBox2.place(relx=0.5, rely=0.5, anchor='s')
self.search_button = Button(master, text="Search", command=self.search)
self.search_button.place(relx=0.75, rely=0.15, anchor='w')
#self.search_button.bind('<Return>', self.search)
self.master.bind('<Return>', self.search) #Just clears the entry box
self.multiLook_button = Button(master, text="MultiLook", command=self.multiLook)
self.multiLook_button.place(relx=0.7, rely=0.6, anchor='w')
self.multiSearch_button = Button(master, text="MultiSearch", command=self.multiSearch)
self.multiSearch_button.place(relx=0.84, rely=0.6, anchor='w')
self.close_button = Button(master, text="Close", command=master.quit)
self.close_button.place(relx=0.85, rely=0.15, anchor='w')
你走在正确的轨道上,假设你在 class 中定义了 search
,像这样:
class MainGUI():
def __init__(self, master):
# ... Code ...
def search(self, event):
# ... Code ...
您可以直接访问该方法:
self.search_button.bind('<Return>', self.search)
使用这种方法,search_button
小部件必须具有焦点,以便在按下 Enter 时触发事件绑定。
此外,我将建议一种不同的方式来构建您的应用程序,这将有助于增加代码的可读性,并允许更轻松地扩展,例如如果您想在将来添加到应用程序中。最好在开发 GUI 时采取有条不紊的方法,即系统化或循序渐进 - 模块化可以帮助实现这一点。
import tkinter as tk
class MainGUI(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.minsize(width=500, height=175)
self.master.title("Serial Number Decode")
self.main_label()
self.text_boxes()
self.buttons()
def main_label(self):
self.label = tk.Label(self, text='Serial Number Decoder')
self.label.pack()
def text_boxes(self):
# First we create the widgets
self.textBox = tk.Text(self, height=1, width=30)
self.textBox2 = tk.Text(self, height=2, width=50, font=("Sans",12))
# Next place them within the GUI
self.textBox.place(relx=0.5, rely=0.1, anchor='n')
self.textBox2.place(relx=0.5, rely=0.5, anchor='s')
def buttons(self):
self.search_button = tk.Button(self, text="Search", command=self.search)
# You can set a widget to have the 'focus' like so:
self.search_button.focus()
# And bind an event on focus in, focus out, enter, shift, etc. - e.g.:
self.search_button.bind('<FocusIn>', self.do_something)
self.search_button.bind('<FocusOut>', self.do_something_else)
self.search_button.bind('<Return>', self.search)
# Other buttons below...
def search(self, event=None):
# Do something now that the event has been triggered
有几件事需要注意 - def search(self, event=None)
,我在这里为事件关键字参数提供默认值 None
,因为如果单击按钮(根据设置 command=self.search
), 'event' 将 不 传递给该方法,但是如果该方法是从绑定触发的,则 'event' 将被传递。另外,我的代码示例不是很详尽,我编写了一些代码并对其进行了结构化,纯粹是为了举例,例如我没有在 GUI 中注册搜索按钮,所以它不会出现,或者 self.do_something
没有定义所以 运行 这实际上会引发一个 AttributeError
。我希望这一切都有帮助!最后这里有一个很好的 tkinter 资源,NMT Tkinter.