#python #user-interface #tkinter
#python #пользовательский интерфейс #tkinter
Вопрос:
Я новичок в Tkinter, поэтому извините, если вопрос выглядит тривиальным. Я разработал приложение selenium, и теперь я пытаюсь сделать его интерактивным с Tkinter. У меня возникают некоторые проблемы с передачей текстовых записей в качестве входных данных функции:
Я определил функцию для входа в систему, которая уже была протестирована и работает должным образом:
def SelfsignIn(user,passw):
browser = webdriver.Firefox(executable_path='C:Program Files (x86)geckodriver.exe') (You can find the entire code at the end)
....
Затем я создаю графический интерфейс, который должен принимать имя пользователя и пароль, введенные пользователем, в качестве аргумента функции SelfsignIn:
После некоторых размышлений я придумал этот метод:
window = tk.Tk()
window.title("Login Window")
greeting = tk.Label(text="Welcome")
greeting.pack()
username = tk.Label(text="Username")
username_entry = tk.Entry()
password = tk.Label(text="Password")
password_entry = tk.Entry()
username.pack()
username_entry.pack()
password.pack()
password_entry.pack()
par1 = str(username_entry.get())
par2 = str(password_entry.get())
button = tk.Button(window, text='Log in', width=25,command=lambda: SelfsignIn(par1,par2))
button.pack()
window.mainloop()
Функция вызывается правильно, фактически веб-страница открывается и выполняет все операции до тех пор, пока не придет время использовать учетные данные. На этом этапе текстовые поля входа не заполняются вводом, указанным в графическом интерфейсе.
Что я делаю не так? Не стесняйтесь давать мне какие-либо предложения, заранее спасибо.
Комментарии:
1. Не могли бы вы предоставить полную функцию SelfSignIn?
2. @Bowolf, спасибо за проявленный интерес. Я думал, что это не имеет значения. Я добавил это в конце вопроса
Ответ №1:
Вы вызываете username_entry.get()
примерно через миллисекунду после создания виджета ввода. Пользователь даже не увидит виджет, а тем более не успеет набрать текст.
Не используйте lambda
— вызовите соответствующую функцию и попросите функцию получить данные, когда это необходимо, а не раньше. Это облегчит написание вашего кода, его понимание и обслуживание.
def signin():
par1 = str(username_entry.get())
par2 = str(password_entry.get())
SelfsignIn(par1, par2)
...
button = tk.Button(window, text='Log in', width=25,command=signin)
Ответ №2:
Ваша ошибка заключается в том, что вы извлекаете значение полей еще до того, как отобразится графический интерфейс, поэтому, естественно, две строки par1 и par2 будут пустыми.
Вы должны получить значение внутри записи при нажатии кнопки.