@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()
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 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() для смены значения.
Ответ написан
Комментировать
danila763
@danila763
Учу python, sql
1) В аргумент command должна передаваться функция а не результат ее выполнения
# Не так
btn_ent = Button(command=click())
# А так
btn_ent = Button(command=click)


2) txt.get() Возвращает текст, его надо куда-то присвоить
# Не так
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)

# А так
def click():
    text = txt.get()
    global TextR
    if text == 'russian':
        TextR='Введите длину пароля'
    elif text == 'english':
        TextR='Enter password length'
    title.config(text=TextR)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы