Метка кнопки - текст против текстовой переменной - PullRequest
0 голосов
/ 26 сентября 2019

Кнопка TTK: text vs textvariable. Я пытаюсь установить текст метки кнопки на «Hi» по умолчанию и, нажав на нее, изменить текст на «Hello»

Я пробовал несколько методов, чтобыполучить текст для изменения.

Если я установлю text = "Привет", это нормально, но всякий раз, когда я добавляю textvariable, он ломается и не отображает текстовую метку на самой кнопке.

Что-то не так с добавлением аргументов text и textvariable при создании кнопки в tkinter, как показано ниже?

С Программирование на Python GUI с использованием Tkinter Alan D. Moore

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

tvar = tk.StringVar()
def swaptext():
    if tvar.get() == 'Hi':
        tvar.set('There')
    else:
        tvar.set('Hi')

# my_button = ttk.Button(parent, text='Hi', textvariable=tvar, command=swaptext) # BUTTON LABEL IS BLANK
my_button = ttk.Button(parent, text='Hi', command=swaptext) # WORKS, BUT NO TEXTVARIABLE TO CALL TO SWAP TEXT
my_button.pack()

root.mainloop()

Я ожидаю, что кнопка покажет сразу, с "Hi", учитывая, что по умолчанию text установлено значение "Hi", но на самом деленачинается пустым.Хотя он начинается пустым, когда я нажимаю кнопку, он переключается с:

  • BLANK -> Hi

  • Hi -> Hello

  • Привет -> Привет (и т. Д.)

Может кто-нибудь указать мне, что я делаю неправильно, почему мой дефолтКнопка text значение и textvariable?

Ближайший ответ, который я нашел, был здесь: TextVariable не работает , но это было в отношении конструкторов Entry, которые непохоже, в качестве аргумента принимают text.

Если я пропустил ответ на этот вопрос, я извиняюсь, но я нигде не вижу ни одного из перечисленных.

1 Ответ

2 голосов
/ 26 сентября 2019

Вы не установили значение по умолчанию для StringVar.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

tvar = tk.StringVar(value="Hi")

def swaptext():
    if tvar.get() == 'Hi':
        tvar.set('There')
    else:
        tvar.set('Hi')

my_button = ttk.Button(root, textvariable=tvar, command=swaptext)
my_button.pack()

root.mainloop()
...