簡體   English   中英

Python-tkinter:對於應該從數組收集條目並傳遞到文本框的循環,僅傳遞最后一個條目

[英]Python-tkinter: For loop supposed to collect entries from an array and pass to text box, only passes last entry

我是編碼的新手,如果這個問題有點基礎,請您道歉。 無論如何,這個用python編寫的GUI im應該會收集多個用戶條目,並將它們傳遞到GUI中的文本框。 但是,現在,代碼末尾的for循環僅將最后一個條目放入文本框。 為什么?

from Tkinter import *

class Application(Frame):
""" A SPC program that takes user input and saves the file """
def __init__(self,master):
    """ initializes the frame """
    Frame.__init__(self,master)
    self.grid()
    #creates an array to store entries into
    self.entry_list = [None]*7
    self.create_widgets()


def create_widgets(self):
    """create widgets for user inputted data"""
    # creates a text widget next to the entries that displays what the user has input
    Label(self, text = "Do these values you entered seem correct?").grid(row = 0, column = 4, sticky = W, padx = 5, pady = 5)
    self.checktext = Text(self, width =15, height = 42, wrap = WORD)
    self.checktext.grid(row = 1, rowspan = 10, column = 4, sticky = W, padx =5, pady =5)

    # get name
    Label(self, text = "First Name:").grid(row = 0, column = 0, sticky = W, padx=5, pady=5)
    self.entry_list[0] = Entry(self)
    self.entry_list[0].grid(row = 0, column = 1)       
    Label(self, text = "Last Name:").grid(row = 1, column = 0, sticky = W, padx=5, pady=5)
    self.entry_list[1] = Entry(self)
    self.entry_list[1].grid(row = 1, column = 1)

    # get work order
    Label(self, text = "Work Order Number:").grid(row = 2, column = 0, sticky = W, padx=5, pady=5)
    self.entry_list[2] = Entry(self)
    self.entry_list[2].grid(row = 2, column = 1)

    # get todays date
    Label(self, text = "Todays Date:").grid(row = 3, column = 0, sticky = W, padx=5, pady=5)
    self.entry_list[3] = Entry(self)
    self.entry_list[3].grid(row = 3, column = 1)

    # get bubble number
    Label(self, text = "Bubble Number:").grid(row = 4, column = 0, sticky = W, padx=5, pady=5)
    self.entry_list[4] = Entry(self)
    self.entry_list[4].grid(row = 4, column = 1)

    # get USL and LSL
    Label(self, text = "USL:").grid(row = 5, column = 0, sticky = W, padx=5, pady=5)        
    self.entry_list[5] = Entry(self)
    self.entry_list[5].grid(row = 5, column = 1)    
    Label(self, text = "LSL:").grid(row = 6, column = 0, sticky = W, padx=5, pady=5)       
    self.entry_list[6] = Entry(self)
    self.entry_list[6].grid(row = 6, column = 1)                      

    # button to submit user entered values up to the input data values portion of the gui
    self.button = Button(self)
    self.button["text"] = "Submit"
    self.button["command"] = self.submit
    self.button.grid(row = 5, column = 2, sticky = W, padx=5, pady=5)

    # creates a spot to dictate whether USL and LSL are correct
    self.checklimits = Text(self, width = 20, height = 3, wrap = WORD)
    self.checklimits.grid(row = 6, column = 3, sticky = W, padx = 5)

    """# get User Input Data values
    Label(self, text = "Enter Results:").grid(row = 7, column = 0, sticky = W, padx=5, pady=5)        
    self.entry_list8 = Text(self, width = 15, height = 30)
    self.entry_list8.grid(row = 7, column = 1) """  

def submit(self):
    """ submits user data up to input data section of GUI and checks USL vs LSL"""
    # checks to make sure limits were imput properly
    USL = int(self.entry_list[5].get())
    LSL = int(self.entry_list[6].get())

    if USL > LSL:
        message = "Limits are good"
    else:
        message = "USL can't be less than LSL, please re-enter USL and LSL"

    self.checklimits.delete(0.0, END)
    self.checklimits.insert(0.0, message)


    # puts entries into text box
    for x in self.entry_list:
       entry = x.get()
       if entry:
            self.checktext.delete(0.0, END)
            self.checktext.insert(END, entry + "\n")




root = Tk()
root.title("SPC Input Program")
root.geometry("700x750")

app = Application(root)

問題在這里:

for x in self.entry_list:
   entry = x.get()
   if entry:
        self.checktext.delete(0.0, END)
        self.checktext.insert(END, entry + "\n")

每次都將下一個字符串放入小部件之前,您要刪除小部件中的所有內容。 要解決此問題,只需不要每次都刪除所有內容。 如果要在重新填充小部件之前清除它,請將刪除內容移出循環:

self.checktext.delete(0.0, END)
for x in self.entry_list:
   entry = x.get()
   if entry:
        self.checktext.insert(END, entry + "\n")

好吧,我弄清楚了,男孩,我感覺很蠢。 所以這是我之前的for循環:

for x in self.entry_list:
   entry = x.get()
   if entry:
        self.checktext.delete(0.0, END)
        self.checktext.insert(END, entry + "\n")

每次提交時,該self.chectext.delete(0.0, END)行都可以刪除用戶在文本框中輸入的所有內容,但是由於位於for循環中,因此它刪除了每個條目,然后添加下一個條目。 所以,當然,它只會顯示最后一個條目,因為它刪除了前幾個條目! 所以我將行放在for循環之外,如下所示:

# puts entries into text box
    self.checktext.delete(0.0, END)     
    for x in self.entry_list:
       entry = x.get()
       if entry:
            print entry                
            self.checktext.insert(END, entry + "\n")

現在工作正常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM