Как указал @HenryYik, ваш код требует сначала объявить numx = 0
в глобальном пространстве, а затем объявить его глобальным внутри вашей функции update
.
Альтернативный подход к решению вашей проблемы - использоватьа collections.Counter
;у него есть преимущество, заключающееся в упрощении логики кода в update
, и, в случае необходимости, он также подсчитывает количество раз, когда был выбран каждый фрукт.
Список фруктов также объявляется вне функцииupdate
, делая код более общим.
Примерно так:
import tkinter as tk
import random
from collections import Counter
def update(delay=1000):
"""picks a fruit at random, and updates the display and the tally
calls itself again after a time delay
"""
fruit = random.choice(fruit_list)
counter[fruit] += 1
label1['text'] = fruit
label2['text'] = counter['apple']
mytext.insert('end', str(fruit) + '\n')
wn.after(delay, update)
fruit_list = ['apple', 'orange', 'melon', 'carrot']
counter = Counter()
wn = tk.Tk()
wn.geometry('300x300')
mytext = tk.Text(wn, bg='pink', width=10, height=200)
mytext.pack()
label1 = tk.Label(wn, text='', bg='yellow', bd=3)
label1.place(x=200, y=20)
label2 = tk.Label(wn, text='', bg='lightgreen', bd=3)
label2.place(x=200, y=50)
update()
wn.mainloop()