Задать вопрос
@DanOK17

Почему в tkinter не обновляется текст на экране?

Нужно чтобы текст в текстовом окне изменялся на тот, который будет в переменной TextR, но этого не происходит.

from random import choice
from tkinter import *
import keyword


root = Tk()

TextR = 'Вас приветсвует программа по созданию паролей созданный DanOK17 \nYou are welcomed by the password creation program created by DanOK17\n\nНапишите russian если хотите продолжить на русском \nWrite english if you want to continue in English\n'
TextY = 'Yes'
TextN = 'No'
txt = StringVar()


def click():
    txt.get()
    global TextR
    print('1')
    if txt == 'russian':
        TextR='Введите длинну пароля'
        title.config(text=TextR)
    elif txt == 'english':
        TextR='Enter password length'
        title.config(text=TextR)


root['bg'] = '#fafafa'
root.title('PGen')
root.wm_attributes('-alpha', 0.9)
root.geometry('700x500')

frametxt = Frame(root, bg='grey')
frametxt.place(relheight=0.6, relwidth=1)

frame_btn = Frame(root, bg='grey', bd=5)
frame_btn.place(relheight=0.4, relwidth=1, rely=0.60)


title = Label(frametxt, text=TextR, bg='white', font=40)
title.pack(fill=BOTH, expand=True, side=TOP)
ent = Entry(frame_btn, bg='white', font=100, bd=2, textvariable=txt)
ent.pack(fill=BOTH, pady=2)
btn_ent = Button(frame_btn, text='Ввести', font=100, bd=2, height=5, command=click())
btn_ent.pack(side=RIGHT, pady=2,padx=2)
btnY = Button(frame_btn, text=TextY, font=100, bd=2, width=30, height=5)
btnY.pack(pady=2, side=LEFT)
btnN = Button(frame_btn, text=TextN, font=100, bd=2, width=30, height=5)
btnN.pack(pady=2, side=RIGHT)

if txt == 'russian':
    TextR = 'Введите длинну пароля: '

root.mainloop()
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Простой Комментировать
Ответ пользователя Vindicar К ответам на вопрос (2)
Vindicar
@Vindicar
RTFM!
Потому что ты не понимаешь, что делаешь.
btn_ent = Button(frame_btn, text='Ввести', font=100, bd=2, height=5, command=click())

Ты присваиваешь в качестве обработчика щелчка по кнопке результат вызова функции click(). У неё нет ни одного return, так что она возвращает None.
Если ты хотел назначить click() как обработчик, то нужно было указать саму функцию, а не результат её вызова.
command=click


Далее, сравнение
txt == 'чтототам'
некорректно, так как StringVar() и str - разные типы данных, и они не будут равны. Используй
txt.get() == 'чтототам'
. Одинокий вызов txt.get() в начале click() бесполезен, так как ты игнорируешь возвращаемое get() значение.

Собственно, я не вижу где ты инициализируешь переменную txt. У тебя нет ни одного вызова txt.set().

Ну и до кучи, присваивание TextR перед root.mainloop() ни на что не повлияет, так как она использовалась ранее.
Если хочешь, чтобы присваивание переменной тут же отражалось в элементах управления, нужно использовать еще один StringVar(), и вызывать его метод .set() для смены значения.
Ответ написан
Комментировать