Невозможно вернуть значение из поля ввода Tkinter - необходимо передать значение записи из одного сценария в другой - PullRequest
0 голосов
/ 01 октября 2019

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

Мне нужна заявкаполе, которое принимает переменную, которая возвращается в код и может использоваться в качестве переменной в скрипте. Мне действительно нужно импортировать этот скрипт и использовать его в коде другого скрипта.

На данный момент я знаю, что кнопка «Отправить» вызывает функцию get_data (), потому что при использовании «print» отображается введенный пароль. Но с помощью return вернуть его родительской функции, а затем вернуть это значение и распечатать вывод основной функции ничего не возвращает.

Спасибо

from tkinter import *

def get_params():

    def get_data():
        pw = pwentry_enter.get()
        return pw

    window = Tk()

    headFrame = Frame(window)
    headFrame.grid(row=0, pady=6)
    header = Label(headFrame, text="Input Password", font=(f1, 20))
    header.grid(column=0, row=0, columnspan=2, sticky="w")
    mainFrame = Frame(window, bg="#1B2230")
    mainFrame.grid(row=1, pady=6)

    raw_password = StringVar()
    pwentry_enter=Entry(mainFrame, width=30, font=(f2,10), show="*", textvariable=raw_password)
    pwentry_enter.pack()

    btnFrame = Frame(window)
    btnFrame.grid(row=2, pady=6)

    submit_btn = Button(btnFrame, text='Submit', command=get_data, width=10, bg="#DB4158", fg="black", font=(f2, 20))
    submit_btn.grid(column=1, row=0)
    quit_btn = Button(btnFrame, text='Quit', command=window.destroy, width=10, bg="#DB4158", fg="black", font=(f2, 20))
    quit_btn.grid(column=0, row=0)

    window.mainloop()

    a = get_data()
    return a

1 Ответ

1 голос
/ 01 октября 2019

Не добавляйте return в get_data () и используйте глобальную переменную для хранения пароля при нажатии кнопки отправки и возврата при нажатии кнопки выхода. Вы пытаетесь прочитать данные записи после разрушения окна.

from tkinter import *

pw = ''
def get_params():
    global pw
    def get_data():
        global pw
        pw = pwentry_enter.get()

    window = Tk()

    headFrame = Frame(window)
    headFrame.grid(row=0, pady=6)
    header = Label(headFrame, text="Input Password", font=(f1, 20))
    header.grid(column=0, row=0, columnspan=2, sticky="w")
    mainFrame = Frame(window, bg="#1B2230")
    mainFrame.grid(row=1, pady=6)

    raw_password = StringVar()
    pwentry_enter=Entry(mainFrame, width=30, font=(f2,10), show="*", textvariable=raw_password)
    pwentry_enter.pack()

    btnFrame = Frame(window)
    btnFrame.grid(row=2, pady=6)

    submit_btn = Button(btnFrame, text='Submit', command=get_data, width=10, bg="#DB4158", fg="black", font=(f2, 20))
    submit_btn.grid(column=1, row=0)
    quit_btn = Button(btnFrame, text='Quit', command=window.destroy, width=10, bg="#DB4158", fg="black", font=(f2, 20))
    quit_btn.grid(column=0, row=0)

    window.mainloop()

    return pw
...