Я новичок в python и у меня небольшая проблема с tkinter.И да, я знаю, как использовать Google, но я не нашел решения для этого.Может быть, потому что я не знаю, как и что искать, может быть, потому что мой плохой английский: P.
У меня есть 3 функции
tick()
# обновить времякаждые 200 мс, если время не старое refreshT()
# температура обновления (считано из 3 файлов) refreshW()
# обновить виджет погоды (изображение)
Они называют себя через 200 мс, каждые 5 с и каждые 30 м.
Проблема в том, что время не обновляется в течение ~ 2 секунд, если вызывается refreshT.
У меня естьпрочитайте что-нибудь о темах здесь но я этого не понял.Итак, мой вопрос: как я могу дать конкретной функции более высокий приоритет или сделать что-нибудь еще, чтобы она продолжала работать, что бы ни случилось?
Я не ожидаю, что законченный код будет просто какой-то информацией о некоторых модулях или около того, которые делают то, что я ищуfor.
Я использую raspbian для raspi 3b, если это уместно.
Вот интересная часть кода:
#Python 3.5.3:
#(...)
def tick():
try: #tests if there is an old time to compare
timeOld #if not, set it to none
except NameError:
timeOld = None
timeNew = getTime(1) #a module ive written, returning the time
#in a specific order
if timeOld != timeNew: #compare (this is to avoid running the
#function to often, better for performance
clock.config(text=timeNew) #display the new time
timeOld = timeNew #set the old time to the actual time
clock.after(200, tick) #call itself after 200ms
def refreshT(): #refreshing temperatures
tempCpu.config(text=(round(float(open('/sys/class/thermal/thermal_zone0/temp').read())/1000, 1),'°C'))
tempIns.config(text=(round(float(open('/sys/bus/w1/devices/28-0417a312a0ff/w1_slave').read().split('t=')[1])/1000, 1),'°C'))
tempOut.config(text=(round(float(open('/sys/bus/w1/devices/28-0517a27018ff/w1_slave').read().split('t=')[1])/1000, 1),'°C'))
tempCpu.after(5000, refreshT) #call itself after 5 sec
def refreshW(refresh=True):
if refresh == True:
weather_raw = createImg(Ids[1])
weather.config(image=weather_raw) #reload image
weather.image = weather_raw
weather.after(1800000, refreshW) #call itself after 30min
#(...)
root = Tk()
#(...)
clock = Label(
root,
font=('Helvetica', 50),
text=texts[0],
fg='white',
bg='black',
cursor='none'
)
clock.place(
relx=0.5,
y=242,
anchor='n'
)
tempCpu = Label(
root,
font=('Helvetica', 40),
text='$CPU°C',
fg='white',
bg='black',
cursor='none'
)
tempCpu.place(
relx=0.2,
y=100,
anchor='n'
)
tempIns = Label(
root,
font=('Helvetica', 40),
text='$INS°C',
fg='white',
bg='black',
cursor='none'
)
tempIns.place(
relx=0.5,
y=100,
anchor='n'
)
tempOut = Label(
root,
font=('Helvetica', 40),
text='$OUT°C',
fg='white',
bg='black',
cursor='none'
)
tempOut.place(
relx=0.8,
y=100,
anchor='n'
)
tick()
refreshT()
refreshW(False)
root.mainloop()
Если этот код не будет работать, здесь - полный код на Github.
Надеюсь на помощь или ссылку на ответ, извините, если это дубликат.