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
Ale Enter
przycisk jest w pełni sprawny
Odpowiedzi:
2 dla odpowiedzi № 1command=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):