我不确定我错过了什么。我正在为前10行运行SQL查询。我正在将它们输出到Tkinter Entrys。为什么只有第一个SQL行显示在每个条目中,例如self.output1和self.output2? 我希望每个Tkinter条目中都显示每个SQL行。
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()
答案 0 :(得分:0)
问题是条目小部件选项text
只是textvariable
的缩写;条目小部件没有text
选项。这意味着每个小部件都共享相同的文本变量。因为它们都与相同的textvariable
相关联,所以它们将共享相同的值。因此,当您将文本插入一个文本时,它将被插入到所有文本中。
解决方案是从您创建text=' '
窗口小部件的每个位置删除Entry
。