问题
我正在编写一个非常基本的GUI,用于使用python API向sqlite3数据库发出sql命令。 GUI的功能包括load database
按钮,显示数据库路径的条目小部件,SQL command
条目小部件和输入按钮。我的问题是尝试将<return>
绑定到SQL Entry小部件。我希望能够选择按<Return>
键或Enter
按钮,以输入处理命令。你怎么做到这一点?
我的代码:
import Tkinter
import sqlite3
import tkFileDialog
class SQLCommand(Tkinter.Tk):
def __init__(self):
Tkinter.Tk.__init__(self)
self.init_gui()
self.geometry('400x200')
self.mainloop()
def init_gui(self):
self.frameM=Tkinter.Frame(self,relief='ridge').pack(side=Tkinter.TOP)
Tkinter.Button(self.frameM,relief='ridge',text='Load Database',command=self.load).pack(side=Tkinter.TOP,fill=Tkinter.X)
self.filename_entry=Tkinter.StringVar(self)
Tkinter.Entry(self.frameM,textvariable=self.filename_entry).pack(side=Tkinter.TOP,fill=Tkinter.X)
self.frameL=Tkinter.Frame(self,relief='ridge').pack(side=Tkinter.TOP,fill=Tkinter.X)
Tkinter.Label(self.frameL,text='SQL Command:').pack(side=Tkinter.TOP,fill=Tkinter.X)#,text='Insert SQL Command').pack(Tkinter.TOP)
self.frameE=Tkinter.Frame(self,relief='ridge').pack(side=Tkinter.TOP,fill=Tkinter.X)
self.Evar=Tkinter.StringVar(self.frameE)
Tkinter.Entry(self.frameE,textvariable=self.Evar).pack(side=Tkinter.TOP,fill=Tkinter.X)
self.frameB=Tkinter.Frame(self,relief='solid').pack(side=Tkinter.TOP,fill=Tkinter.X)
self.B=Tkinter.Button(self.frameB,text='Enter',command=self.enter)
self.B.pack(side=Tkinter.TOP,fill=Tkinter.X)
self.bind('<Return>',self.enter)
def load(self):
self.database_filename=tkFileDialog.askopenfilename()
self.filename_entry.set(self.database_filename)
self.conn=DataBase(self.database_filename).conn
def enter(self,event):
with self.conn as c:
cur=c.cursor()
cur.execute(self.Evar.get())
print cur.fetchone()
按下返回键时的错误
但Enter
按钮完全正常运行
答案 0 :(得分:2)
command=self.button
在没有参数的情况下执行self.enter()
,但bind(..., self.enter)
使用一个参数执行self.enter(event)
您可以将event
的默认值设置为使用这两种方法,即
def enter(self, event=None):