Tkinter - Пользовательский ввод не возвращается после ввода в поле ввода - PullRequest
0 голосов
/ 19 апреля 2020

Добрый день,

Кодер Noob здесь.

Я просмотрел эти форумы и нашел несколько похожих вопросов, но я пытался экстраполировать его на мой конкретный пример.

Я могу получить поле ввода для заполнения, хотя после нажатия кнопки «График» я не могу получить значения ввода из каждого поля ввода для печати. Если я что-то введу, все, что я когда-либо получу, это следующий вывод:

.!frame.!entry .!frame2.!entry .!frame3.!entry .!frame4.!entry .!frame5.!entry .!frame6.!entry

Вот мой код:

import tkinter as tk

fields = ('Input panel major length',
 'Input panel intermediate length', 'Input drillhole average length',
  'Input Conversion rate', 'Geostats Interpolation Parameters: Major (Z)',
  'Geostats Interpolation Parameters: Intermediate (Y)')

def calcs(values):
    for value in values:
        print(values[value])

def makelines(root, fields):
    entries = {}
    for field in fields:
        row = tk.Frame(root)
        lab = tk.Label(row, width=50, text=field+": ", anchor='w')
        ent = tk.Entry(row)
        row.pack(side=tk.TOP, 
                 fill=tk.X, 
                 padx=5, 
                 pady=5)
        lab.pack(side=tk.LEFT)
        ent.pack(side=tk.RIGHT, 
                 expand=tk.YES, 
                 fill=tk.X)
        entries[field] = ent
    return entries

if __name__ == '__main__':
    root = tk.Tk()
    root.title('Plot')
    root.geometry('800x400')
    ents = makelines(root, fields)
    b2 = tk.Button(root, text='Quit', command=root.quit)
    b2.pack(side=tk.RIGHT, padx=5, pady=5)
    b1 = tk.Button(root, text='Plot',
        command=(lambda e=ents: calcs(e)))
    b1.pack(side=tk.LEFT, padx=5, pady=5)
    root.mainloop()

1 Ответ

1 голос
/ 19 апреля 2020

Вы звоните calcs со словарем, содержащим Entry виджетов, проиндексированных строкой. Поэтому, когда вы делаете

for value in values:
    print(values[value])

, вы печатаете сами виджеты, а не их содержимое.

Вместо этого попробуйте использовать метод get() виджетов Entry:

for value in values:
    print(values[value].get())

Вы также можете использовать метод словаря values() для перебора значений вместо ключей:

def calcs(wdict):
    for w in wdict.values():
        print(w.get())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...