Получение всех значений из виджетов текстового поля и возврат их в виджеты кнопок - PullRequest
0 голосов
/ 23 декабря 2019

Когда я возвращаю значения в набор текстовых полей и ожидаю, что один и тот же набор записей будет отображаться в соответствующих кнопках, я смогу вернуть только последнее введенное текстовое значение во все кнопки, используя Tkinter python 3. Как получитьсоответствующие значения текста в соответствующих полях кнопок? Это соответствующий код для него.

def inputt(self):
    x = int(self.number.get())
    entries_list=[]
    path_list=[]
    button_list=[]
    label_list=[]
    button_1_list=[]

    for i in range(0,x):
        l = Label(root,text="Device "+str(i+1)+":")
        l.grid(row=i+5,column=0)
        label_list.append(l)

        self.e = Entry(root)
        self.e.grid(row=i+5,column=1)
        entries_list.append(self.e)

        b1 = Button(root,text="Next",command=lambda:load(self,self.inputt))
        b1.grid(row=i+6,column=0)

def load(self, inputt):
    for i in range(0,x):
        b3=Button(root, text=self.e[i].get())
        b3.grid(row=i+100,column=0)
        button_list.append(b3)

Для заданных текстовых записей я хочу вернуть значения кнопкам функции Def(load).

1 Ответ

0 голосов
/ 23 декабря 2019

Переменные, которые объявляют виджеты, должны быть объявлены отдельно, в противном случае последняя переменная перезапишет текущий виджет, а при вызове будет отображаться только последнее значение виджета.

Это можно исправить с помощью перечислениясписок. Техника перечисления индексирует объекты, а также выбирает каждый объект из списка одновременно.

Также необходимо объявить каждую текстовую переменную для виджета Entry, объявленной отдельно. Для этого каждая переменная будет добавлена ​​в списоки затем этот список будет перечисляться при вызове переменных.

Вот решение,

import tkinter
from tkinter import *

root = Tk()

entries_list = []
path_list = []
button_list = []
label_list = []
var_list = []
x = 5    #int variable that define how many times will loop run

for var in range(0,x): 
    #always define a variable type before adding it to Entry Box
    se = StringVar()
    var_list.append(se)

def inputt():
    # use enumerate for indexing the list
    for p,q in enumerate(var_list):
        l = Label(root,text="Device "+str(p+1)+":")
        l.grid(row=p,column=0)
        label_list.append(l)

        e = Entry(root, textvariable = var_list[p], width=25)
        e.grid(row=p, column=1)

    b1 = Button(root,text="Next",command=lambda:load())
    b1.grid(row=p+2,column=0)


def load():
    # Entered values will loaded to entries_list when next button is pressed
    for u,v in enumerate(var_list):
        entries_list.append(var_list[u].get())

    for j,k in enumerate(entries_list):
        b3=Button(root, text=k)
        b3.grid(row= j + x + 2,column=0,columnspan = 2,sticky = EW)
        button_list.append(b3)

inputt()
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...