Python Tkinter 标签刷新问题

Python Tkinter Label Refresh Woes

我又带着另一个 python 问题回来了。 不久前,我编写了一个基于控制台的程序,可以从您本地网络上的比特币矿工中提取统计数据。我决定将它变成 gui,并为我的程序选择 EasyGUI 和 Tkinter 的组合。

我的输入框(ip、刷新率、asic 类型)都使用 EasyGUI,只是为了节省代码行,因为 Tkinter 需要更多的编写才能完成同样的工作。但是,我的实际结果页面是使用 Tkinter 编写的,因为它允许我以 user-defined 间隔刷新显示的数据。

我的问题是: 我的程序 运行ning 很开心,然后做了一些小的 ui 调整(标题、字体等),现在在我最近的编译(使用 pyinstaller)之后,我注意到了统计信息(标签)根本不更新。我现在已经无数次查看了我的代码,但似乎无法找到阻止统计数据按定义的时间间隔更改的原因。

我希望有新眼光的人可以帮助我发现我的愚蠢错误,因为在这些小的添加之前 运行宁完美。

这是一个 cut-down 版本,它仍然 运行 并产生相同的问题:

import Tkinter as tk

from pycgminer import CgminerAPI

cgminer = CgminerAPI()
cgminer.host = 192.168.x.x
summary = cgminer.summary()
update = 1000
def L1(label):
    def hashrate():
        msg = "Your current GH/S = "
        speed = msg , summary['SUMMARY'][0]['GHS 5s']
        label.config(text=speed)
        label.after(update, hashrate)
    hashrate()
root = tk.Tk()
root.title("Eyes On Miner GUI V0.2")
label = tk.Label(root)
label.pack()
L1(label)
root.mainloop()

pastebin 上的完整代码,如果您想自己尝试运行。 (python 2.7) Full Code

我 运行 你的这么多代码,用 time() 代替摘要。它在空闲状态下工作。在控制台中,运行 和 python -i program.py 或添加 root.mainloop.

import tkinter as tk
from time import time

update = 1000
def L1(label):
    def hashrate():
        msg = "Your current GH/S = "
        speed = msg , time()
        label.config(text=speed)
        label.after(update, hashrate)
    hashrate()
root = tk.Tk()
root.title("Eyes On Miner GUI V0.2")
label = tk.Label(root)
label.pack()
L1(label)

如果问题不在于 summary['SUMMARY'][0]['GHS 5s'],那么一定是与 CgminerAPI 不兼容,或者更可能与 easygui 不兼容。后者旨在取代 tkinter,而不是与其一起使用。如果代码一开始运行正常然后退出,那么一定是您使用的附加函数之一触发了冲突。