Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2017 11:30:19

gmaksim
От: Россия
Зарегистрирован: 2017-07-17
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение значений с полей формы сделанных в цикле (Tkinter)

Стандартно, можно получить значение путем:

 self.test= StringVar()
 self.test_entry= Entry(place, textvariable=self.test)
 self.test.get()
Но как его получить (что вводит в entry пользователь после), если все entry был размещены через for с нужным смещением, и на GUI они все располагаются, но фактически имеют одно имя “self.test” и при помощи get я получаю только введенное значение в последний entry?

Отредактировано gmaksim (Июль 21, 2017 11:30:46)

Офлайн

#2 Июль 21, 2017 12:01:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Получение значений с полей формы сделанных в цикле (Tkinter)

Засуньте набор однотипных элементов в список, тогда у вас будут доступны ссылки на любой элемент как на член списка



Офлайн

#3 Июль 21, 2017 12:09:06

gmaksim
От: Россия
Зарегистрирован: 2017-07-17
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение значений с полей формы сделанных в цикле (Tkinter)

Это собственно первое, что пришло в голову, но не понимаю, как это корректно реализовать.
Примерно так “раскидываются” 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 тоже не выходит, но где-то же находится эта информация и как-то ее можно вытащить.

Отредактировано gmaksim (Июль 21, 2017 12:10:58)

Офлайн

#4 Июль 21, 2017 12:11:39

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Получение значений с полей формы сделанных в цикле (Tkinter)

gmaksim
У вас есть два варианта - обращаться к элементу по индексу, или обращаться к нему по имени. В первом случае вам нужен список, во втором словарь. Если у вас нет ни индекса ни словаря, то ваши элементы управления бессмысленны.



Отредактировано FishHook (Июль 21, 2017 12:19:25)

Офлайн

#5 Июль 21, 2017 12:18:59

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Получение значений с полей формы сделанных в цикле (Tkinter)

  
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()



Отредактировано FishHook (Июль 21, 2017 12:20:21)

Офлайн

#6 Июль 21, 2017 12:23:01

gmaksim
От: Россия
Зарегистрирован: 2017-07-17
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение значений с полей формы сделанных в цикле (Tkinter)

Все получилось и действительно совсем не сложно, огромное спасибо!

Отредактировано gmaksim (Июль 21, 2017 13:23:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version