我正在玩 Python Tkinter,而事件绑定在我的脚本中不起作用。这是我的脚本:
import tkinter as tk
from tkinter import ttk
def quit():
exit(0)
class ChartApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side='top', fill='both', expand=True)
menubar = tk.Menu(container)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Exit", command=quit)
menubar.add_cascade(label="File", menu=filemenu)
tk.Tk.config(self, menu=menubar)
self.frames = {}
# This is not an error to have 2 StartPage. I am planning to implement multiple pages afterwards
for F in (StartPage, StartPage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
def printsomething(msg):
print(msg + " is selected!")
pg1_button = ttk.Button(self, text="Page 1", command=lambda: printsomething("Page 1"))
pg1_button.grid(row=1, column=0, pady=10, padx=10, sticky='e')
pg2_button = ttk.Button(self, text="Page 2", command=lambda: printsomething("Page 2"))
pg2_button.grid(row=1, column=1, pady=10, padx=10, sticky='w')
self.bind("a", lambda event: self.focus_set())
self.bind("a", printsomething("Page 1"))
app = ChartApp()
app.mainloop()
我想按下键盘上的按钮“a”,就好像我点击pg1_buttion
执行该printsomething
功能一样。但是,它不起作用。此外,一旦我运行我的脚本,我就会自动获得以下输出。
Output:
Page 1 is selected!
Page 1 is selected!
我确定自动输出与这两行有关,但我不知道为什么
self.bind("a", lambda event: self.focus_set())
self.bind("a", printsomething("Page 1"))
另一个问题,我有一个菜单栏文件-> 退出。我想按下按钮“f”然后“e”退出GUI。我在“filemenu.add_command”中尝试了加速器选项,但它不起作用。那么接下来我可以尝试什么?谢谢!