Tkinter Python обновляет переменную - PullRequest
0 голосов
/ 28 ноября 2018

Я строю это тамагочи, которое я хочу кормить и заниматься спортом.Кормление его должно добавить + 1 вес, и спортивные состязания должны заставить его похудеть.Поскольку я голландский, Кормление переводится как «voeden», а спорт - как «sporten».Я не могу обновить переменную на экране графического интерфейса пользователя Tkinter при запуске программы.Кто-нибудь может мне помочь?

from tkinter import *

root = Tk()
root.geometry("610x445")
photo = PhotoImage(file="hondje.png")

pet_tukker = {

'naam': 'Tukker',
'leeftijd': 2,
'gewicht': 11,
'honger': True,
'foto': photo,
'zinnen': ['Hey leuk dat je er bent', 'Ik vind jou leuk', 'Zullen we buiten spelen', 'Dag maatje!',
           'Ik hoop dat het goed gaat met je, met mij in ieder geval wel!', 'Hey knapperd'],
'etenzinnen': ['Dat was smullen!!', 'Ik vond het heerlijk!', 'Ik kan dit blijven eten!',
               'Heb je nog meer voor me?', 'Tsjoh dat was niet zo lekker hoor'],
'sportenzinnen': ['Ik hou van sporten!', 'Ik vond het heerlijk!', 'Ik kan wel blijven rennen!',
                  'Wat gingen we snel he!', 'Wanneer gaan we nog een keertje rennen?', 'Ik heb het idee dat ik steeds beter wordt!']

}

class Window(Frame):


def __init__(self, master=None):
    Frame.__init__(self, master)
    self.master = master
    self.init_window()


def init_window(self):

    self.master.title("Danny's dierentuin")
    self.pack(fill=BOTH, expand=1)

    quitButton = Button(self, text="Afsluiten", command=self.client_exit)
    voedenButton = Button(self, text="Voeden", command=self.voeden)
    sportenButton = Button(self, text="Sporten", command=self.sporten)

    quitButton.place(x=150, y=410)
    voedenButton.place(x=330, y=410)
    sportenButton.place(x=500, y=410)

    naamLabel = Label(root, text="Naam: " + str(pet_tukker['naam']))
    leeftijdLabel = Label(root, text="Leeftijd: " + str(pet_tukker['leeftijd']))
    gewichtLabel = Label(root, text="Gewicht: " + str(pet_tukker['gewicht']))
    tukkerLabel = Label(root, image=pet_tukker['foto'])
    pratenLabel = Label(root)
    pratenLabel = Entry(root)

    naamLabel.place(x=10, y=10)
    leeftijdLabel.place(x=10, y=35)
    gewichtLabel.place(x=10, y=60)
    pratenLabel.place(x=10, y=410)
    tukkerLabel.place(x=100, y=0)


def voeden(self):
    gewicht = pet_tukker.get('gewicht')
    nieuw_gewicht = gewicht + 1
    pet_tukker.update({'gewicht': nieuw_gewicht})

def sporten(self):
    gewicht = pet_tukker.get('gewicht')
    nieuw_gewicht = gewicht - 1
    pet_tukker.update({'gewicht': nieuw_gewicht})

def client_exit(self):
    exit()


app = Window(root)
root.mainloop()

Пожалуйста, если кто-нибудь может мне помочь, я новичок в этом.Особенно Ткинтеру.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Функция конфигурации в Tkinter позволяет обновлять метки и кнопки.

Вы можете добавить gewichtLabel.configure(text="Gewicht: " + str(pet_tukker['gewicht'])) внизу функции voeden.

Он не распознает gewichtLabel, поскольку он локальный.Вы можете сделать его переменной класса, изменив gewichtLabel на self.gewichtLabel везде.Это должно работать тогда.

def voeden(self):
    gewicht = pet_tukker.get('gewicht')
    nieuw_gewicht = gewicht + 1
    pet_tukker.update({'gewicht': nieuw_gewicht})
    self.gewichtLabel.configure(text="Gewicht: " + str(pet_tukker['gewicht']))
0 голосов
/ 28 ноября 2018

Если я правильно понимаю ваш код, вес питомца отображается в gewichtLabel.Текст, отображаемый на этом ярлыке, устанавливается после того, как вы открываете окно, но не изменяетсяЯ думаю, что код для изменения отображаемого текста метки tkinter выглядит примерно так:

gewichtLabel.config(text="Gewicht: " + str(pet_tukker['gewicht']))

Effbot содержит много ценной информации о tkinter: http://effbot.org/tkinterbook/label.htm




На второй взгляд несколько мыслей:

Window выглядит как пользовательский класс, унаследованный от класса tkinter Frame.Надеюсь, вы знаете, что у tkinter есть собственный класс Window, который вы перезаписываете.Чтобы избежать этого, вы можете импортировать tkinter следующим образом: import tkinter as tk, а затем вызывать класс следующим образом: class Window(tk.Frame): таким образом существует класс tkinter tk.Window и ваш унаследованный класс Window.

I'mнемного настороженно по этому поводу: pet_tukker.update({'gewicht': nieuw_gewicht})
Это, вероятно, предназначено для обновления gewichtLabel, но я никогда не использовал этот метод при работе с tkinter и из того, что я собрал в документе, я подозреваю, что он не работаеттак, как вы хотели.(Но, откровенно говоря, я могу ошибаться здесь)

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