我有一个使用 pyqt4 开发的 GUI,它有一个运行按钮。 单击运行按钮时,我调用了一个计时器和一个线程。 计时器不断监视线程。 在线程上,我调用命令提示符来执行测试用例。我希望线程在命令提示符打开之前处于活动状态,并希望在关闭命令提示符后将其说为死。
我为此编写的代码如下。有什么逻辑缺陷吗?或者有什么更好的方法来实现这一目标?
self.connect(self.run_button, SIGNAL('clicked()'), self.runscript)
def runscript(self):
self.timer = QTimer()
self.timer.connect(self.timer, SIGNAL("timeout()"),self.sendData)
self.timer.start(1000)
def sendData(self):
if self.run_timer:
run_monitor_object = RunMonitor()
print 'Starting the thread...........'
run_monitor_object.start()
self.run_timer = False
if run_monitor_object.isAlive():
print 'Thread Alive...'
else:
print 'Thread is Dead....'
class RunMonitor(threading.Thread):
def __init__(self, parent=None):
threading.Thread.__init__(self)
def run(self):
print 'Invoking Command Prompt..........'
subprocess.call(["start", "/DC:\Scripts", "scripts_to_execute.bat"], shell=True)
当我运行这个时,我收到以下错误...
UnboundLocalError:局部变量 'run_monitor_object' 在赋值前引用 if run_monitor_object.isAlive():
只是想知道还能怎么做,我能
此代码:
if self.run_timer:
run_monitor_object = RunMonitor()
print 'Starting the thread...........'
run_monitor_object.start()
self.run_timer = False
if run_monitor_object.isAlive():
print 'Thread Alive...'
else:
print 'Thread is Dead....'
错了。如果未采用第一个分支(可能在第二次调用中,当self.run_timer
已为 True 时),则不会分配run_monitor_object
,并且您尝试在第二个if
中使用它。
若要使其正常工作,请将run_monitor_thread
作为类的实例变量。
另外,为什么要在计时器中启动线程?这只会不必要地使您的逻辑复杂化。创建计时器时启动它。然后,计时器将用于监视它。