Python 为什么每行上都重复第一个SQL行?

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,

我不确定我错过了什么。我正在为前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, 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='

您是否尝试过
打印(结果)
以查看查询结果是否符合您的预期?谢谢,下次我会尝试更好地解释它。