tkinter函数冻结其他功能

时间:2018-05-26 11:56:47

标签: python python-3.x function tkinter freeze

我是python的新手,我对tkinter有点问题 是的,我知道如何使用谷歌,但我还没有找到它的解决方案。也许因为我真的不知道如何寻找和寻找什么,也许是因为我的英语不好:P。

我有3个功能

  • tick() #refresh每个200毫秒的时间,如果时间不是旧时间
  • refreshT()#刷新温度(从3个文件中读取)
  • refreshW() #refresh天气小工具(图片)

他们在200ms,每5s和每30m之后自称。

问题是,如果调用refreshT,时间不会更新约2秒。

我已经阅读了有关线程here的内容,但我并不理解。 所以,我的问题是我如何才能给一个特定的功能提供更高的优先级,或者做任何其他事情继续运行的事情呢?

我不希望完成代码只是一些关于某些模块的信息,或者是我正在寻找的模块。

如果相关的话,我在raspi 3b上使用raspbian。

以下是代码的有趣部分:

#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()

如果此代码不起作用,here是Github上的完整代码。

希望得到帮助或链接到答案,对不起,如果这是重复的话。

0 个答案:

没有答案