Tkinter - изменить текст/ввод метки при нажатии кнопки

У меня есть две метки и поля ввода (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()

Текущий результат

Желаемый результат (после нажатия кнопки «Отправить»)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для 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 13.01.2023 00:11

@arnpry вам просто нужно очистить ответ stringVar, который я отредактировал

Alexander 13.01.2023 00:17

Спасибо @Александр! Еще один вопрос ... Я заметил, что после ввода пользователя / пароля «A» список для «B» содержит записи пользователя / пароля «A» и «B», а не только пользователя / пароль «B». Скриншот --> i.imgur.com/B8zsg7g.png

arnpry 13.01.2023 15:01

@arnpry это не список. это словарь и глобальная переменная entries. Я сделал это, потому что предполагаю, что вы планируете использовать ввод информации от пользователя A и пользователя B после того, как оба ввели свою информацию. Если это не так, вы можете просто переместить переменную entries внутрь функции submit, и это больше не будет иметь место.

Alexander 14.01.2023 02:48

Другие вопросы по теме