如何让Tkinter.Button同时响应<return>和按钮点击?

时间:2017-01-17 14:38:39

标签: python tkinter

问题

我正在编写一个非常基本的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 image description here

Enter按钮完全正常运行

1 个答案:

答案 0 :(得分:2)

command=self.button在没有参数的情况下执行self.enter(),但bind(..., self.enter)使用一个参数执行self.enter(event)

您可以将event的默认值设置为使用这两种方法,即

def enter(self, event=None):