此程序是围绕从系统任务栏应用程序获取功能而构建的。 该脚本在启动时不执行任何操作,但是当单击名为“登录”的菜单项时,该脚本将运行以下代码,并建立单独的API对象
class loginSTT(threading.Thread):
def __init__(self):
# threading.Thread.__init__(self, *args, **kwargs)
super(loginSTT, self).__init__()
self.daemon = True
self.start()
def run(self):
global STTApi_instance
STTApi_instance = STTApi()
mainWin.SendTrayMessage("Logged in", "Login was successful")
mainWin.login_action.setVisible(False)
RefreshLoop()
那部分效果很好。程序不输出错误。然后,该程序在调用Refreshloop()时开始其原始用途。 Eveyr 5分钟后,它在此API实例内部ping一个函数,收集新数据进行分析。但是,这会导致计时错误。
class RefreshLoop(threading.Thread):
def __init__(self):
# threading.Thread.__init__(self, *args, **kwargs)
super(RefreshLoop, self).__init__()
self.daemon = True
self.start()
def run(self):
while True:
data = STTApi_instance.RefreshVoyage()
if 'dilemmaname' in data['Dilemma']:
mainWin.DilemmaResolution(data['Dilemma'])
return
mainWin.SendTrayMessage("No dilemma", f"Remaining Dilithium: {data['voyage_hp']}")
STTApi_instance.RecallVoyage()
sleep(300)
而且我相信是运行睡眠的线程的组合,同时调用函数“ mainWin.SendTrayMessage”会产生错误,因为这是我在主gui类中编写的函数,它简化了任务栏的发送警报,该代码如下所示:
def SendTrayMessage(self, topic="", body=""):
self.tray_icon.showMessage(
f"{topic}",
f"{body}",
QSystemTrayIcon.Information,
1000)