У меня есть две метки и поля ввода (A и B). Когда я ввожу имя пользователя/пароль для «Имя пользователя/пароль», я хочу нажать кнопку «Отправить», затем изменить поля меток/ввода на «Имя пользователя/пароль B» и иметь возможность нажать кнопку «Отправить». " снова, используя Tkinter
.
Код Python
import tkinter as tk
root = tk.Tk()
a_user_var = tk.StringVar()
a_pass_var = tk.StringVar()
b_user_var = tk.StringVar()
b_pass_var = tk.StringVar()
def submit():
a_user = a_user_var.get()
a_pass = a_pass_var.get()
a_user_var.set("")
a_pass_var.set("")
b_user = b_user_var.get()
b_pass = b_pass_var.get()
b_user_var.set("")
b_pass_var.set("")
a_user_label = tk.Label(root, text = "A Username")
a_user_entry = tk.Entry(root, textvariable=a_user_var)
a_pass_label = tk.Label(root, text = "A Password")
a_pass_entry = tk.Entry(root, textvariable=a_pass_var, show = "•")
b_user_label = tk.Label(root, text = "B Username")
b_user_entry = tk.Entry(root, textvariable=b_user_var)
b_pass_label = tk.Label(root, text = "B Password")
b_pass_entry = tk.Entry(root, textvariable=b_pass_var, show = "•")
sub_btn = tk.Button(root, text = "Submit", command=submit)
a_user_label.grid(row=0, column=0)
a_user_entry.grid(row=0, column=1)
a_pass_label.grid(row=1, column=0)
a_pass_entry.grid(row=1, column=1)
b_user_label.grid(row=0, column=0)
b_user_entry.grid(row=0, column=1)
b_pass_label.grid(row=1, column=0)
b_pass_entry.grid(row=1, column=1)
sub_btn.grid(row=2, column=0)
root.mainloop()
Текущий результат
Желаемый результат (после нажатия кнопки «Отправить»)
Для A
и B
не нужно создавать уникальный ярлык и виджеты входа. Вместо этого просто используйте один набор виджетов и измените текст метки при нажатии кнопки на B
. Если вам нужно сохранить содержимое виджета ввода, вы можете взять текст метки и проанализировать его, чтобы увидеть, какому символу принадлежит конкретный набор.
Например:
import tkinter as tk
root = tk.Tk()
user_var = tk.StringVar()
pass_var = tk.StringVar()
entries = {}
def submit():
user = user_var.get()
passw = pass_var.get()
label_text = user_label["text"]
char = label_text.split()[0]
entries[char] = (user, passw)
if char == "A":
user_label["text"] = "B" + label_text[1:]
pass_label["text"] = "B" + pass_label["text"][1:]
user_var.set('')
pass_var.set('')
print(entries)
user_label = tk.Label(root, text = "A Username")
user_entry = tk.Entry(root, textvariable=user_var)
pass_label = tk.Label(root, text = "A Password")
pass_entry = tk.Entry(root, textvariable=pass_var, show = "•")
sub_btn = tk.Button(root, text = "Submit", command=submit)
sub_btn.grid(row=2, column=0)
user_label.grid(row=0, column=0)
user_entry.grid(row=0, column=1)
pass_label.grid(row=1, column=0)
pass_entry.grid(row=1, column=1)
root.mainloop()
@arnpry вам просто нужно очистить ответ stringVar, который я отредактировал
Спасибо @Александр! Еще один вопрос ... Я заметил, что после ввода пользователя / пароля «A» список для «B» содержит записи пользователя / пароля «A» и «B», а не только пользователя / пароль «B». Скриншот --> i.imgur.com/B8zsg7g.png
@arnpry это не список. это словарь и глобальная переменная entries
. Я сделал это, потому что предполагаю, что вы планируете использовать ввод информации от пользователя A
и пользователя B
после того, как оба ввели свою информацию. Если это не так, вы можете просто переместить переменную entries
внутрь функции submit
, и это больше не будет иметь место.
Эта конфигурация по-прежнему удерживает пользовательский ввод из «А», а не очищает его.