上下文:
我正在用Qt creator和python中的“behavior”文件构建一个图形界面。我的GUI的测试版本是:

预期行为:
我正在运行两个不同的线程,它们被引用到同一个函数,具有不同的输入参数。使用选择器按钮,我可以给变量赋值1或2(并显示它)
按钮启动线程允许正确的线程启动(第一次)。
应该通过修改全局running变量来关闭循环。
这是我的密码# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui, uic
import sys
import threading
import time
import Queue
running = False
first_thread = None
second_thread = None
form_class = uic.loadUiType("simple2.ui")[0]
q = Queue.Queue()
select = 0
def action(string, queue): #function called by threads
global running
while(running):
phrase = string
if queue.qsize() < 10:
queue.put(phrase)
#else:
# print queue.qsize()
class MyWindowClass(QtGui.QMainWindow, form_class):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
#buttons
self.startButton.clicked.connect(self.start_clicked)
self.stopButton.clicked.connect(self.stop_clicked)
self.selector.clicked.connect(self.sel_click)
#variables
self.first = False
self.second = False
#queue
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.update_phrase)
self.timer.start(1)
def start_clicked(self): #start button callback
global select
if select > 0:
global running
running = True
print "started"
if (not self.first) & (select == 1):
first_thread.start()
self.first = True
if (not self.second) & (select == 2):
second_thread.start()
self.second = True
self.startButton.setEnabled(False)
self.startButton.setText('Starting...')
def stop_clicked(self): #stop button callback
global running
running = False
print "stopped"
self.startButton.setEnabled(True)
self.startButton.setText('Start Thread')
def sel_click(self): #selector button callback
global select
if select < 2:
select = select + 1
else:
select = 1
self.thread_counter.setText(str(select))
def update_phrase(self): #looping function
global running
if (not q.empty()) & running:
self.startButton.setText('Thread on')
abc = q.get()
print abc
def closeEvent(self, event):
global running
running = False
if __name__ == "__main__":
first_thread = threading.Thread(target=action, args = ("first", q))
second_thread = threading.Thread(target=action, args = ("second", q))
app = QtGui.QApplication(sys.argv)
w = MyWindowClass(None)
w.setWindowTitle('Multiple threads test in python')
w.show()
app.exec_()
现在,每个线程应该在终端上简单地打印它们的参数(“第一个”或“第二个”)。
如果线程是第一次启动的,我的代码可以工作。但我想在线程之间无限次地切换。在
既然线程无法停止,有没有办法“暂停”它们?
我找不到解决方案,我希望有人也能帮我一段代码。提前谢谢你
这篇博客探讨了在Python GUI应用中如何管理和切换两个并发线程。作者使用Qt库创建了一个界面,通过按钮控制线程的启动和停止。线程通过全局变量`running`控制循环,并使用Queue进行通信。当尝试暂停线程时,由于线程的运行不可预测,作者寻求一种方法在线程之间无缝切换。博客寻求解决方案以实现线程的暂停和恢复功能。
4297

被折叠的 条评论
为什么被折叠?



