Создание Simpledialog с TK, который имеет переменное количество входов и затем выводит их - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать упрощенное диалоговое окно, в котором вы можете вводить числа. Однако число входных данных зависит от набора данных, технически люди используют его для ввода строк в набор данных.

Я не могу понять, как заставить его работать.

Я пытался поместить объекты 'e1' в словарь и затем использовать их позже, однако это выдает ошибку неизвестного параметра

class MyDialog(simpledialog.Dialog):
def body(self, master):
    d2={}
    f={}
    for i in range(len(df_data_1.columns) -1 ):
        Label(master, text=df_data_1.columns[i]).grid(row=i)
        self.e1 = Entry(master)
        self.e1.grid(row=i, column=1)
        d2[df_data_1.columns[i]] = self.e1.get()

        print(d2[df_data_1.columns[i]])
    return self.e1
    print(self.e1)
    f[df_data_1.columns[i]]=self.e1
    return d2 # initial focus
    return f
    print(f)

def apply(f):
    for x in range(len(df_data_1.columns) -1 ):
        d2[df_data_1.columns[x]] = f[df_data_1.columns[x]].get()
        print(d2[df_data_1.columns[x]])
    first = d2
    print(first)

root = Tk()
d = MyDialog(root)
print (d.result)  

1 Ответ

0 голосов
/ 10 января 2019

Вам нужно хранить экземпляры в списке. Проблема с вашим кодом в том, что вы перезаписываете self.e1 на каждой итерации цикла.

Это выглядело бы примерно так (непроверено, поскольку вы не дали нам код, который мы можем запустить для дублирования проблемы):

self.entries = []
for i in range(len(df_data_1.columns) -1 ):
    Label(master, text=df_data_1.columns[i]).grid(row=i)
    entry = Entry(master)
    entry.grid(row=i, column=1)
    self.entries.append(entry)

Позже вы можете перебрать все записи, как это:

for entry in self.entries:
    value = entry.get()
    print("value:", value)
...