Я создаю программу на Python для книги по ролевой игре. Я хочу отображать параметры героя с помощью счетчиков, которые я могу изменять по своему желанию. Я бы хотел, чтобы значение, отображаемое в счетчиках, автоматически обновлялось, когда алгоритм изменяет атрибуты героя во время боя. Вероятно, мне следует использовать StringVar, но я не знаю, как это сделать.
Вот упрощенный сценарий:
from tkinter import *
'''My question: how to automatically update the value shown in the spinbox
after hero.life is modified when clicking on the SUBSTRACT button ? '''
class App(Tk):
def __init__(self, size, hero):
super().__init__()
self.hero = hero
self.label_text = "LIFE POINTS"
self.geometry('%dx%d' % (size))
self.minsize(*size)
self.maxsize(*size)
self.columnconfigure((0, 1), weight=1, uniform='a')
self.rowconfigure((0), weight=1, uniform='a')
self.create_widgets()
self.mainloop()
def create_widgets(self):
# To simulate hero.life being modified by an algorithm :
Button(self, text="SUBSTRACT 1",
command=self.substract_1).grid(row=0, column=1)
# fra
fra = Frame(self)
fra.grid(row=0, column=0, sticky="nsew", padx=10)
# Spinbox linked to fra
self.xxx = StringVar()
self.spb = Spinbox(fra, from_=-10, to=100,
textvariable=self.xxx,
command=self.on_spinbox_change,
width=3, justify="right")
self.spb.pack(side=RIGHT, expand=NO, fill=X)
# self.update_spinbox_screen()
self.update_StringVar()
# Label linked to fra
label = Label(fra, width=20, text=self.label_text, anchor='e', padx=5)
label.pack(side=RIGHT)
def update_StringVar(self):
self.xxx.set(str(self.hero.life))
def substract_1(self):
self.hero.modify_life(-1)
def on_spinbox_change(self):
# instant update of hero.life :
self.hero.life = int(self.spb.get())
print("from spinbox :", self.hero.life) # debug
class Hero():
def __init__(self):
self.life = 17
def modify_life(self, x):
self.life += x
print("from algorithm :", self.life) # debug
# WINDOW.update_StringVar() # HOW TO DO THE LINK ???
if __name__ == "__main__":
HERO = Hero()
WINDOW = App((350,70), HERO)
Подробнее здесь: https://stackoverflow.com/questions/798 ... in-a-label
Как использовать текстовую переменную для отражения/отображения значения счетчика в метке? ⇐ Python
Программы на Python
1770830236
Anonymous
Я создаю программу на Python для книги по ролевой игре. Я хочу отображать параметры героя с помощью счетчиков, которые я могу изменять по своему желанию. Я бы хотел, чтобы значение, отображаемое в счетчиках, автоматически обновлялось, когда алгоритм изменяет атрибуты героя во время боя. Вероятно, мне следует использовать StringVar, но я не знаю, как это сделать.
Вот упрощенный сценарий:
from tkinter import *
'''My question: how to automatically update the value shown in the spinbox
after hero.life is modified when clicking on the SUBSTRACT button ? '''
class App(Tk):
def __init__(self, size, hero):
super().__init__()
self.hero = hero
self.label_text = "LIFE POINTS"
self.geometry('%dx%d' % (size))
self.minsize(*size)
self.maxsize(*size)
self.columnconfigure((0, 1), weight=1, uniform='a')
self.rowconfigure((0), weight=1, uniform='a')
self.create_widgets()
self.mainloop()
def create_widgets(self):
# To simulate hero.life being modified by an algorithm :
Button(self, text="SUBSTRACT 1",
command=self.substract_1).grid(row=0, column=1)
# fra
fra = Frame(self)
fra.grid(row=0, column=0, sticky="nsew", padx=10)
# Spinbox linked to fra
self.xxx = StringVar()
self.spb = Spinbox(fra, from_=-10, to=100,
textvariable=self.xxx,
command=self.on_spinbox_change,
width=3, justify="right")
self.spb.pack(side=RIGHT, expand=NO, fill=X)
# self.update_spinbox_screen()
self.update_StringVar()
# Label linked to fra
label = Label(fra, width=20, text=self.label_text, anchor='e', padx=5)
label.pack(side=RIGHT)
def update_StringVar(self):
self.xxx.set(str(self.hero.life))
def substract_1(self):
self.hero.modify_life(-1)
def on_spinbox_change(self):
# instant update of hero.life :
self.hero.life = int(self.spb.get())
print("from spinbox :", self.hero.life) # debug
class Hero():
def __init__(self):
self.life = 17
def modify_life(self, x):
self.life += x
print("from algorithm :", self.life) # debug
# WINDOW.update_StringVar() # HOW TO DO THE LINK ???
if __name__ == "__main__":
HERO = Hero()
WINDOW = App((350,70), HERO)
Подробнее здесь: [url]https://stackoverflow.com/questions/79887583/how-to-use-a-textvariable-to-reflect-show-a-value-of-a-spinbox-in-a-label[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия