Python 为什么每行上都重复第一个SQL行?
我不确定我错过了什么。我正在为前10行运行SQL查询。我正在将它们输出到Tkinter Entrys。为什么每个条目(如self.output1和self.output2)中只显示第一个SQL行? 我希望每个SQL行显示在每个Tkinter条目中Python 为什么每行上都重复第一个SQL行?,python,tkinter,Python,Tkinter,我不确定我错过了什么。我正在为前10行运行SQL查询。我正在将它们输出到Tkinter Entrys。为什么每个条目(如self.output1和self.output2)中只显示第一个SQL行? 我希望每个SQL行显示在每个Tkinter条目中 import os import pypyodbc import tkinter from tkinter import ttk from tkinter import messagebox from tkinter import BOTH, END,
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=ENTERSERVERNAME;Database=ENTERDATABASENAME;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.ENTERTABLENAME " # table name
"with (nolock)"
"WHERE FIRSTNAME = ?")
Values = [firstname]
cursor.execute(SQLCommand,Values)
results = cursor.fetchmany(10)
if results:
self.output0.insert(0,results[0])
self.output1.insert(0,results[1])
self.output2.insert(0,results[2])
self.output3.insert(0,results[3])
self.output4.insert(0,results[4])
self.output5.insert(0,results[5])
self.output6.insert(0,results[6])
self.output7.insert(0,results[7])
self.output8.insert(0,results[8])
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, text=' ', bd=0,)
self.output0.grid(column=0, row=6, columnspan=5, padx=100, pady=0)
self.output1 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output1.grid(column=0, row=7, columnspan=5, padx=100, pady=0)
self.output2 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output2.grid(column=0, row=8, columnspan=5, padx=100, pady=0)
self.output3 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output3.grid(column=0, row=9, columnspan=5, padx=100, pady=0)
self.output4 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output4.grid(column=0, row=10, columnspan=5, padx=100, pady=0)
self.output5 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output5.grid(column=0, row=11, columnspan=5, padx=100, pady=0)
self.output6 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output6.grid(column=0, row=12, columnspan=5, padx=100, pady=0)
self.output7 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output7.grid(column=0, row=13, columnspan=5, padx=100, pady=0)
self.output8 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output8.grid(column=0, row=14, columnspan=5, padx=100, pady=0)
self.output9 = tkinter.Entry(self, width=150, text=' ', bd=0,)
self.output9.grid(column=0, row=15, columnspan=5, padx=100, pady=0)
self.blank = tkinter.LabelFrame(self, height=10, width=620, text=' ', bd=0,) # blank line
self.blank.grid(column=0, row=16, 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()
问题是输入小部件选项
text
只是textvariable
的缩写;条目小部件没有文本
选项。这意味着每个小部件共享相同的textvariable。因为它们都绑定到相同的textvariable
上,所以将共享相同的值。因此,当您在其中插入文本时,它将被插入到所有文本中
解决方案是从您创建
条目
小部件的每个位置删除text='
。您是否尝试过打印(结果)
以查看查询结果是否符合您的预期?谢谢,下次我会尝试更好地解释它。