#python #tkinter
#python #tkinter
Вопрос:
Имя базы данных: customs
Имя таблицы: dummy(int (primary id), varchar)
Цель: 1. Вставить в базу данных 2. Показать значения
пользовательского интерфейса базы данных:
1. Mainapp: предоставляет возможность вставки и отображения
2. Вставка: вставляет в базу данных
3. Дисплей: отображает значения базы данных
Независимые модули Mainapp, Insert и Display работают должным образом,
тогда как экземпляр Insert (или) Display внутри класса Mainapp не работает.
import Tkinter
import MySQLdb
db = MySQLdb.connect("localhost","root","root", "customs")
class Insert(Tkinter.Tk):
def __init__(self, parent):
Tkinter.Tk.__init__(self, parent)
self.parent=parent
self.initialise()
def initialise(self):
self.grid()
self.grid_columnconfigure(0,weight=1)
self.resizable(True, False)
self.entryVariable=Tkinter.StringVar()
self.entry = Tkinter.Entry(self, textvariable=self.entryVariable)
self.entry.grid(column=0, row=0, sticky='EW')
self.entryVariable.set(u"Enter PID")
self.entryVariable2=Tkinter.StringVar()
self.entry2 = Tkinter.Entry(self, textvariable=self.entryVariable2)
self.entry2.grid(column=0, row=1, sticky='EW')
self.entryVariable2.set(u"Enter Name")
self.button=Tkinter.Button(self, text="Insert", command=self.OnButtonClick)
self.button.grid(column=0, row=2)
self.VarLabel = Tkinter.StringVar()
self.label=Tkinter.Label(self, textvariable=self.VarLabel, anchor="w", fg="white", bg="red")
self.label.grid(column=0, row=3)
self.VarLabel.set(u"Enter Details!")
def OnButtonClick(self):
Id=int(self.entryVariable.get())
name=self.entryVariable2.get()
sql="INSERT INTO dummy VALUES('%d', '%s')"%(Id, name)
try:
cursor = db.cursor()
cursor.execute(sql)
db.commit()
self.VarLabel.set("Inserted Successfully")
except:
self.VarLabel.set("Error: did not insert")
db.rollback()
class Display(Tkinter.Tk):
def __init__(self, parent):
Tkinter.Tk.__init__(self, parent)
self.parent=parent
self.initialise()
def initialise(self):
self.grid()
self.grid_columnconfigure(0,weight=1)
self.resizable(True, False)
self.VarLabel = Tkinter.StringVar()
self.label=Tkinter.Label(self, textvariable=self.VarLabel, anchor="w", fg="black", bg="white")
self.label.grid(column=0, row=0)
cursor = db.cursor()
xx="dummy"
sql="SELECT * FROM %s"%(xx)
cursor.execute(sql)
result=cursor.fetchall()
ans="n%snIDtNamen"%(xx)
for res in result:
ans=ans str(int(res[0])) "t" str(res[1]) "n"
self.VarLabel.set(ans)
class MainApp(Tkinter.Tk):
def __init__(self, parent):
Tkinter.Tk.__init__(self, parent)
self.parent=parent
self.initialise()
def initialise(self):
self.grid()
self.grid_columnconfigure(0,weight=1)
self.resizable(True, False)
self.button=Tkinter.Button(self, text="Insert", command=self.insert)
self.button.grid(column=0, row=0)
self.button2=Tkinter.Button(self, text="Show", command=self.display)
self.button2.grid(column=0, row=1)
def insert(self):
app=Insert(None)
app.title("Customs-Insert")
app.mainloop()
def display(self):
app=Display(None)
app.title("Customs-Display")
app.mainloop()
if __name__=="__main__":
mainapp=MainApp(None)
mainapp.title("Customs")
mainapp.mainloop()
db.close()
Комментарии:
1. У вас должен быть только 1 экземпляр Tk и вместо этого используйте Windows верхнего уровня.
2. … и вызываем
mainloop
ровно один раз.