Я создаю программу на Python для книги по ролевой игре. Я хочу отображать параметры героя с помощью счетчиков, которые я могу изменять по своему желанию. Я бы хотел, чтобы значение, отображаемое в счетчиках, автоматически обновлялось, когда атрибуты героя изменяются алгоритмом во время боя.
Вот упрощенный сценарий, который работает по назначению. Можно ли написать лучше, чтобы избавиться от «глобальности»?
from tkinter import *
class App(Tk):
def __init__(self, size, hero):
global stringvar_life
super().__init__()
stringvar_life = StringVar()
self.hero = hero
self.hero.update_stringvar_life()
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 (spinbox + label)
fra = Frame(self)
fra.grid(row=0, column=0, sticky="nsew", padx=10)
# Spinbox linked to fra
self.spb = Spinbox(fra, from_=-10, to=100,
textvariable=stringvar_life,
command=self.on_spinbox_change,
width=3, justify="right")
self.spb.pack(side=RIGHT, expand=NO, fill=X)
# Label linked to fra
label = Label(fra, width=20, text="LIFE POINTS", anchor='e', padx=5)
label.pack(side=RIGHT)
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():
global stringvar_life
def __init__(self):
self.life = 17
def modify_life(self, x):
self.life += x
print("from algorithm :", self.life) # debug
self.update_stringvar_life()
def update_stringvar_life(self):
stringvar_life.set(str(self.life))
if __name__ == "__main__":
HERO = Hero()
WINDOW = App((350,70), HERO)
Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-spinbox
Как связать текстовую переменную с атрибутом класса, чтобы обновить счетчик? ⇐ Python
Программы на Python
1770841047
Anonymous
Я создаю программу на Python для книги по ролевой игре. Я хочу отображать параметры героя с помощью счетчиков, которые я могу изменять по своему желанию. Я бы хотел, чтобы значение, отображаемое в счетчиках, автоматически обновлялось, когда атрибуты героя изменяются алгоритмом во время боя.
Вот упрощенный сценарий, который работает по назначению. Можно ли написать лучше, чтобы избавиться от «глобальности»?
from tkinter import *
class App(Tk):
def __init__(self, size, hero):
global stringvar_life
super().__init__()
stringvar_life = StringVar()
self.hero = hero
self.hero.update_stringvar_life()
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 (spinbox + label)
fra = Frame(self)
fra.grid(row=0, column=0, sticky="nsew", padx=10)
# Spinbox linked to fra
self.spb = Spinbox(fra, from_=-10, to=100,
textvariable=stringvar_life,
command=self.on_spinbox_change,
width=3, justify="right")
self.spb.pack(side=RIGHT, expand=NO, fill=X)
# Label linked to fra
label = Label(fra, width=20, text="LIFE POINTS", anchor='e', padx=5)
label.pack(side=RIGHT)
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():
global stringvar_life
def __init__(self):
self.life = 17
def modify_life(self, x):
self.life += x
print("from algorithm :", self.life) # debug
self.update_stringvar_life()
def update_stringvar_life(self):
stringvar_life.set(str(self.life))
if __name__ == "__main__":
HERO = Hero()
WINDOW = App((350,70), HERO)
Подробнее здесь: [url]https://stackoverflow.com/questions/79887583/how-to-link-a-textvariable-to-a-class-attribute-in-order-to-update-a-spinbox[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия