Текст метки не обновляется из закодированных методов. Что мне делать?Python

Программы на Python
Anonymous
Текст метки не обновляется из закодированных методов. Что мне делать?

Сообщение Anonymous »

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

Код: Выделить всё

import random, csv
import tkinter as tk
from tkinter import ttk, messagebox, PhotoImage

root = tk.Tk()

class MyFrame(ttk.Frame):
def __init__(self, parent):
ttk.Frame.__init__(self, parent, padding="10 10 10 10")
self.pack()

self.PetStates = ["Idle", "Happy", "Sad", "Dirty", "Sleep", "Eat", "Tired", "Deny"] # All pet states
self.State = 0
self.Pet = 2 # Current Pet
self.frame = 0 # Current Frame
self.PetFrames = [tk.PhotoImage(file="PetAssets/Pet" + str(self.Pet) + self.PetStates[self.State] + "1.png").zoom(4,4), tk.PhotoImage(file="PetAssets/Pet" + str(self.Pet) + self.PetStates[self.State] + "2.png").zoom(4,4)] # Is cycled through in function animation()
self.fps = 750 # Time in milliseconds for root.after method

self.Happiness = 21
self.Hstat = "Happiness: [" + "|" * self.Happiness + "· " * (25 - self.Happiness) + "]"
self.Fullness = 21
self.Fstat = "Fullness:      [" + "|" * self.Fullness + "· " * (25 - self.Fullness) + "]"
self.Energy = 21
self.Estat = "Energy:        [" + "|" * self.Energy + "· " * (25 - self.Energy) + "]"

self.Hlabel = tk.StringVar()
self.Flabel = tk.StringVar()
self.Elabel = tk.StringVar()

def animation():
print(self.PetStates[self.State], self.Happiness)
self.frame = (self.frame + 1) % len(self.PetFrames)
self.canvas.itemconfig(self.image_id, image=self.PetFrames[self.frame])
self.Hlabel.set(self.Hstat)
self.Flabel.set(self.Fstat)
self.Elabel.set(self.Estat)
root.after(self.fps, animation)

def check_state():
randomizer = random.randint(0, 100)
if randomizer == 0 and self.State == 0:
self.State == 3
return
else:
if self.Happiness < 5:
self.State = 2
self.fps = 1000
return
elif self.Fullness < 5:
self.State = 2
self.fps = 1000
return
elif self.Energy <  5:
self.State = 6
self.fps = 1000
return
elif self.State == 3:
return
elif self.State == 4:
return
else:
self.State = 0
self.fps = 750
return

def timepass_happiness():
if self.Happiness == 0:
self.Happiness = 20
check_state()
else:
self.Happiness = self.Happiness - 1
check_state()
root.after(864, timepass_happiness)

...

def run_all():
animation()
timepass_happiness()
timepass_fullness()
timepass_energy()

ttk.Button(self, text="Pet").grid(
column=0, row=0)
ttk.Button(self, text="Feed").grid(
column=1, row=0)
ttk.Button(self, text="Wash").grid(
column=2, row=0)
ttk.Button(self, text="Exit").grid(
column=3, row=0)
Hlabel = ttk.Label(self, textvariable=self.Hlabel).grid(
column=4, row=1, pady=20)
Flabel = ttk.Label(self, textvariable=self.Flabel).grid(
column=4, row=2, pady=20)
Elabel = ttk.Label(self, textvariable=self.Elabel).grid(
column=4, row=3, pady=20)
self.canvas = tk.Canvas(self, width=300, height=160)
self.canvas.place(relx=0, rely=.2)
self.img = self.PetFrames[self.frame]
self.image_id = self.canvas.create_image(150, 90, image=self.img, tag="frame")
run_all()

if __name__ == "__main__":
root.title("Tamagotchi Pet Game")
MyFrame(root)
root.mainloop()
Мне вообще не удалось заставить его работать, даже с различными изменениями в коде, и хотя я хотел бы начать с самого начала, к сожалению, у меня не хватает времени, поскольку я работаю над классным проектом

Вернуться в «Python»