Как обновить ярлыки tkinter, которые хранятся в списке, с помощью кнопки? - PullRequest
0 голосов
/ 08 ноября 2019

Мне нужно обновить список меток, который может быть любого размера. Все вопросы, которые я нашел, уже рассматривались в отдельных ярлыках вместо списков. Я попытался экстраполировать эти ответы на мою проблему и не увенчался успехом.

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

import nation
import game_time

def main():
    Ven = nation.Nation("Venice", 1500000, 60, 5)
    Mil = nation.Nation("Milan", 1250000, 10, 5)
    Flo = nation.Nation("Florence", 7500000, 90, 5)
    game_time.pass_time(1)
    print ("test")
    for n in nation.Nation._registry:
        print (n.get_pop_stats())

if __name__ == '__main__':
    main()

#NATION

name = ""
population = 0
econ_value = 0
owned_land = 0
GROWTH = .002
MONTH_GROWTH = .002/12
current_growth = 0
expected_growth = 0;

class Nation:
    _registry = []
    def __init__(self, name = "dummy", population = -1, econ_value = -1, owned_land = -1):
        self.name = name
        self.population = population
        self.econ_value= econ_value
        self.owned_land = owned_land
        self._registry.append(self)
    def get_pop_stats(self):
        return "Nation: " + self.name + " Population: " + str(self.population) + " Current Growth: " + str(self.current_growth) + " Expected Growth: " + str(self.expected_growth) + "\n"

#TIME

import nation
GROWTH = .002
MONTH_GROWTH = .002/12
def pass_time(x):
    while x > 0:
        for p in nation.Nation._registry:
            temp = p.population
            p.population += p.population*(p.econ_value/100)*MONTH_GROWTH
            p.current_growth = p.population - temp
            p.expected_growth = p.population*(p.econ_value/100)*MONTH_GROWTH
        x -= 1;

#ERROR 

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.do_labels()
    ran = 0
    def do_labels(self):
        pop_text = []
        pop_stats = []
        time = tk.Button(self, text="PASS TIME", fg="red", command= lambda: self.press())
        time.pack(side="bottom")
        i = 0

        for n in nation.Nation._registry:
            pop_text.append(tk.StringVar(value = n.get_pop_stats()))
            pop_stats.append(tk.Label(self, textvariable = pop_text[i], command = print("initializing label")))
            pop_stats[i].pack(side="top")
            i+=1
        self.ran = 1
        self.pack()
        root.update()
    def press(self):
        print("this works")
        game_time.pass_time(1)

root = tk.Tk()
app = Application(master=root)
app.mainloop()



Мой плохо,Вот класс нации, необходимый для запуска кода.

Ожидается: числа в ярлыках обновляются.

Фактически: в окне ничего не происходит, но кнопка успешно печатается в консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...