как вернуть значение функции в словаре - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть проект tkinter, который пытается сделать неизвестное количество записей и получить их значение после нажатия кнопки!Я пробовал много способов, но не могу вернуть значение Entry после того, как объявлено!Вот мой подход:

from tkinter import Entry, Tk, Button

l = [50]


def entry(x, y):
    global data
    e = Entry()
    e.place(x=x, y=y, height=20, width=100)
    data = e.get()
    return data


def loop():
    n = 0
    s = l[0]
    for_x = 10
    for_y = 10
    global en
    en = dict()
    while True:
        if n == s:
            break
        else:
            en[n] = entry(for_x, for_y)
            n = n + 1
            if for_y >= 400:
                for_x = for_x + 110
                for_y = 10
                print("110")
            else:
                for_y = for_y + 30
                print("30")
            print("finally")


root = Tk()

root.minsize(500, 500)

loop()


def dp():
    print(en)


b = Button(command=dp)
b.place(x=480, y=400)
root.mainloop()

В словаре все же отображаются значения, а не только те значения, которые были во время объявления виджета!Я хочу получить его значение после объявления!Есть идеи?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы используете e.get во время создания поля ввода.Вам нужно запустить e.get() в связи с каким-то другим событием.Вы также должны вернуть объект Entry вместо того, чтобы возвращать данные, например:

def entry(x, y):
    e = Entry()
    e.place(x=x, y=y, height=20, width=100)
    return e

def loop():
    n = 0
    s = l[0]
    for_x = 10
    for_y = 10

    global entry_list

    entry_list = []  # Used to store all of the entry widgets you make

    while True:
        if n == s:
            break
        else:
            entry_list.append(entry(for_x, for_y)) # Adds a new entry widget to the list
            n = n + 1
            if for_y >= 400:
                for_x = for_x + 110
                for_y = 10
                print("110")
            else:
                for_y = for_y + 30
                print("30")
            print("finally")

def dp():
    # Get the value of each entry box
    en = []
    for e in entry_list:
        en.append(e.get())
    print(en)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...