单击按钮,将运行SQL查询,SQL行将更新我的Tkinter Entry行。 除非新的SQL查询产生足够的行来填充我的Tkinter Entry行,否则所有行都不会删除或重置。
如果SQL查询只生成1个名称,则只有self.output0将使用新的SQL数据重置。
如果SQL查询只生成2个名称,则只有self.output0 AND self.output1将使用新的SQL数据重置。
如果SQL查询产生10个名称,则self.output0 THROUGH self.output10将使用新的SQL数据重置。
我想让每个按钮点击都重置所有Tkinter Entrys。如果特定行没有SQL输出,则Tkinter Entry行应显示为空白。
关于如何检查SQL并使其正确更新的任何想法?
更新结果应该包含行数的元组。所以我想我需要检查结果是否小于10.如果是,那么我需要取余数并使用Tkinter删除与剩余数字相关的行。
Tkinter目前正在更新所有行,无论如何。如果SQL没有提供新行,由于某种原因,Tkinter将从旧查询中提取数据。
import os
import pypyodbc
import tkinter
from tkinter import ttk
from tkinter import messagebox
from tkinter import BOTH, END, LEFT
class Adder(ttk.Frame):
"""The adders gui and functions."""
def __init__(self, parent, *args, **kwargs):
ttk.Frame.__init__(self, parent, *args, **kwargs)
self.root = parent
self.init_gui()
def calculate(self):
firstname = str(self.first_entry.get())
lastname = str(self.last_entry.get())
license = str(self.lic_entry.get())
if (firstname and not lastname and not license): # "You entered first name."
try:
connection = pypyodbc.connect('Driver={SQL Server};Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=yes;')
except pypyodbc.Error as ex:
sqlstate = ex.args[0]
if sqlstate == '28000':
self.answer_label['text'] = "You do not have access."
cursor = connection.cursor()
SQLCommand = ("SELECT LASTNAME, FIRSTNAME, L_LICNUMBER "
"FROM dbo.My_table " # table name
"with (nolock)"
"WHERE FIRSTNAME = ?")
Values = [firstname]
cursor.execute(SQLCommand,Values)
results = cursor.fetchmany(20)
if results:
self.output0.delete(0, END)
self.output0.insert(0,results[0])
self.output1.delete(0, END)
self.output1.insert(0,results[1])
self.output2.delete(0, END)
self.output2.insert(0,results[2])
self.output3.delete(0, END)
self.output3.insert(0,results[3])
self.output4.delete(0, END)
self.output4.insert(0,results[4])
self.output5.delete(0, END)
self.output5.insert(0,results[5])
self.output6.delete(0, END)
self.output6.insert(0,results[6])
self.output7.delete(0, END)
self.output7.insert(0,results[7])
self.output8.delete(0, END)
self.output8.insert(0,results[8])
self.output9.delete(0, END)
self.output9.insert(0,results[9])
connection.close()
def init_gui(self):
"""Builds GUI."""
self.root.option_add('*tearOff', 'FALSE')
self.grid(column=0, row=0, sticky='nsew') # this starts the entire form
# Input Boxes and Button
self.first_entry = tkinter.Entry(self, width=28) # first input box
self.first_entry.grid(sticky='', column=1, row=1)
self.last_entry = tkinter.Entry(self, width=28) # second input box
self.last_entry.grid(sticky='', column=2, row=1)
self.lic_entry = tkinter.Entry(self, width=28) # third input box
self.lic_entry.grid(sticky='', column=3, row=1)
self.calc_button = ttk.Button(self, text='Search', command=self.calculate) # button
self.calc_button.grid(column=4, row=1, columnspan=1, sticky='w', padx=14)
# Output frame for answers
self.output0 = tkinter.Entry(self, width=150, bd=0,)
self.output0.grid(column=0, row=6, columnspan=5, padx=100, pady=0)
self.output1 = tkinter.Entry(self, width=150, bd=0,)
self.output1.grid(column=0, row=7, columnspan=5, padx=100, pady=0)
self.output2 = tkinter.Entry(self, width=150, bd=0,)
self.output2.grid(column=0, row=8, columnspan=5, padx=100, pady=0)
self.output3 = tkinter.Entry(self, width=150, bd=0,)
self.output3.grid(column=0, row=9, columnspan=5, padx=100, pady=0)
self.output4 = tkinter.Entry(self, width=150, bd=0,)
self.output4.grid(column=0, row=10, columnspan=5, padx=100, pady=0)
self.output5 = tkinter.Entry(self, width=150, bd=0,)
self.output5.grid(column=0, row=11, columnspan=5, padx=100, pady=0)
self.output6 = tkinter.Entry(self, width=150, bd=0,)
self.output6.grid(column=0, row=12, columnspan=5, padx=100, pady=0)
self.output7 = tkinter.Entry(self, width=150, bd=0,)
self.output7.grid(column=0, row=13, columnspan=5, padx=100, pady=0)
self.output8 = tkinter.Entry(self, width=150, bd=0,)
self.output8.grid(column=0, row=14, columnspan=5, padx=100, pady=0)
self.output9 = tkinter.Entry(self, width=150, bd=0,)
self.output9.grid(column=0, row=15, columnspan=5, padx=100, pady=0)
if __name__ == '__main__':
root = tkinter.Tk()
Adder(root)
root.resizable(width=False, height=False) # locks window from being resized
root.mainloop()
该按钮仅重置当前SQL查询更改的特定行数。