Найти - Пользователи
Полная версия: Получение значений с полей формы сделанных в цикле (Tkinter)
Начало » Python для новичков » Получение значений с полей формы сделанных в цикле (Tkinter)
1
gmaksim
Стандартно, можно получить значение путем:
 self.test= StringVar()
 self.test_entry= Entry(place, textvariable=self.test)
 self.test.get()
Но как его получить (что вводит в entry пользователь после), если все entry был размещены через for с нужным смещением, и на GUI они все располагаются, но фактически имеют одно имя “self.test” и при помощи get я получаю только введенное значение в последний entry?
FishHook
Засуньте набор однотипных элементов в список, тогда у вас будут доступны ссылки на любой элемент как на член списка
gmaksim
Это собственно первое, что пришло в голову, но не понимаю, как это корректно реализовать.
Примерно так “раскидываются” entry по GUI:
         y = .15
         for i in self.test_len:
             z = 0
             x = .01
             while z != i:
                 self.test= StringVar()
                 self.test_entry = Entry(place, textvariable=self.test)
                 self.test_entry .place(relx=x, rely=y, height=25, width=80)
                 z += 1
                 x += stepX
             y += stepY
Приходило в голову, что-то в роде:
         z = 0
         b = []
         while z != self.test_len:
             c = str(self.test.get())
             b.append(c)
             z += 1
         print(b)
Но это не верно.
Обращаться по индексу к entry-get тоже не выходит, но где-то же находится эта информация и как-то ее можно вытащить.
FishHook
gmaksim
У вас есть два варианта - обращаться к элементу по индексу, или обращаться к нему по имени. В первом случае вам нужен список, во втором словарь. Если у вас нет ни индекса ни словаря, то ваши элементы управления бессмысленны.
FishHook
  
from Tkinter import *
  
class Application(Frame):
  
    def createWidgets(self):
        for i in range(10):
            textfield = Entry()
            textfield.pack()
            self.text_fields.append(textfield)
        b = Button(text="Press me", command=self.print_all)
        b.pack()
  
    def print_all(self):
        for text_fileld in self.text_fields:
            print text_fileld.get()
  
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.text_fields = []
        self.createWidgets()
  
root = Tk()
app = Application(master=root)
app.mainloop()
root.destroy()
gmaksim
Все получилось и действительно совсем не сложно, огромное спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB