繁体   English   中英

如何创建多个标签和条目小部件,并在 Tkinter 中使用循环从中获取数据

[英]How to create a number of Labels and Entry widgets, and get data from them in Tkinter with loop

我需要使用 Tkinker 创建几个标签和条目字段,它们都是相同的,唯一的区别是 label 中的文本,我可以在列表中找到它。 这就是问题在以简单方式完成时的样子,我想更聪明地使用某种循环,所以我可以扩展它。

from tkinter import *

root = Tk()

question1 = Label(root, text="Please give data number one")
question1.grid(row=1, column=0)
field1 = Entry(root)
field1.grid(row=1, column=1)

question2 = Label(root, text="Please give data number two")
question2.grid(row=2, column=0)
field2 = Entry(root)
field2.grid(row=2, column=1)

question3 = Label(root, text="Please give data number three")
question3.grid(row=3, column=0)
field3 = Entry(root)
field3.grid(row=3, column=1)

question4 = Label(root, text="Please give data number four")
question4.grid(row=4, column=0)
field4 = Entry(root)
field4.grid(row=4, column=1)

data1 = field1.get()
data2 = field2.get()
data3 = field3.get()
data4 = field4.get()

root.mainloop()

我想过这样的事情,但我不知道如何从 Enter 小部件中获取值。

from tkinter import *

root = Tk()

questions = ["Please give data number one",
"Please give data number two"
"Please give data number three"
"Please give data number four"
]

for question in enumerate(questions):
    ask = Label(root, text=question[1])
    ask.grid(row=(question[0] + 1), column=0)
    field = Entry(root)
    field.grid(row=(question[0] + 1), column=1)

root.mainloop()

您需要做两件事:首先保留对小部件的引用,然后使用get()方法获取字符串。

例如:

self.entry = Entry(...)

...一些代码

print("the text is", self.entry.get())

示例获取条目:

class InputPage(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self,parent)        

        label =  Label(self, text="Please give data number four")
        label.grid(row=0, column=0, sticky ='n', columnspan =2)

        # i brought your variable in the class for example sake 

        namesInput = ["First:", "second:", "Third:", "Fourth:", "Fifth:"]

        self.entryWidgets = [] # we want to call this in another function so we assign it as self.variableName

        labelWidgets = []

        #LOOP TO CREATE WIDGETS
        for i in range(0, len(namesInput)):
            labelWidgets.append(Label(self, text = namesInput[i]))
            self.entryWidgets.append(Entry(self))
            labelWidgets[-1].grid(row= i+1, column =0, sticky='e')
            self.entryWidgets[-1].grid(row= i+1, column = 1, sticky='w')

        submit = Button(self, text = "Submit", command = self.getEntries)
        submit.grid(row = 6, column =0, columnspan =2)

    def getEntries(self):
        results = []

        for x in self.entryWidgets: # i.e for each widget in entryWidget list
            results.append(x.get())
        print(results)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM