/ / Jak sprawić, by Tkinter.Button reagował jednocześnie na <Return> i kliknięcie przycisku? - python, tkinter

Jak sprawić, by Tkinter.Button reagowało jednocześnie na <Return> i kliknięcie przycisku? - python, tkinter

Problem

Piszę bardzo prosty GUI do wydawania poleceń sql do bazy danych sqlite3 za pomocą interfejsu API Pythona. Funkcje GUI obejmują load database przycisk, widżet wprowadzania, który wyświetla ścieżkę do bazy danych SQL command widżet wpisu i przycisk Enter. Mój problem polega na próbie powiązania <return> do widżetu wpisu SQL. Chcę mieć możliwość opcjonalnego naciśnięcia <Return> klucz lub Enter przycisk, aby wprowadzić proces polecenia. Jak Ty to robisz?

Mój kod:

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()

Wciśnięty klawisz Error When Return

wprowadź opis obrazu tutaj

Ale Enter przycisk jest w pełni sprawny

Odpowiedzi:

2 dla odpowiedzi № 1

command=self.button wykonuje go bez argumentów jak self.enter() ale bind(..., self.enter) wykonuje go z jednym argumentem jako self.enter(event)

Możesz ustawić domyślną wartość dla event pracować z obiema metodami, tj.

def enter(self, event=None):