相关疑难解决方法(0)

在PyQt中使用QThread的后台线程

我有一个程序,通过我在PyQt中编写的gui与我正在使用的收音机连接.显然,无线电的一个主要功能是传输数据,但为了不断地这样做,我必须循环写入,这会导致gui挂起.因为我从未处理过线程,所以我试图摆脱这些挂起使用QCoreApplication.processEvents().无线电需要在传输之间休眠,所以gui仍然根据这些睡眠的持续时间而挂起.

有没有一种简单的方法可以使用QThread来解决这个问题?我已经找到了有关如何使用PyQt实现多线程的教程,但是大多数都涉及设置服务器,并且比我需要的更先进.老实说,我甚至不需要我的线程在运行时更新任何东西,我只需要启动它,让它在后台传输,然后停止它.

python multithreading pyqt pyqt4 qthread

68
推荐指数
6
解决办法
10万
查看次数

带有movetothread的qt线程

我正在尝试使用线程创建一个程序:主循环开始.当测试返回true时,我创建一个对象,我希望该对象在另一个线程中工作,然后返回并开始测试.

QCoreApplication a(argc, argv);
while(true){
    Cmd cmd;
    cmd =db->select(cmd);
    if(cmd.isNull()){ 
        sleep(2);  
        continue ;
    }
    QThread *thread = new QThread( );
    process *class= new process ();
    class->moveToThread(thread);
    thread->start();

    qDebug() << " msg"; // this doesn't run until  class finish it's work 
}
return a.exec();
Run Code Online (Sandbox Code Playgroud)

问题是,当我启动新线程时,主线程停止并等待新线程的完成.

c++ qt multithreading

16
推荐指数
1
解决办法
5万
查看次数

PyQt4等于time.sleep?

我不能在我的pyqt应用程序中使用time.sleep因为冻结了GUI线程,因此GUI将在此期间完全冻结.我一直在寻找一种方法来处理这个问题.

我尝试使用QTimer,但似乎需要将它们链接到另一个函数?比如等待十秒然后运行一些功能.有没有办法让它等待然后继续当前功能?谢谢!

def num(self):
    for i in range(1,999):
        print i
        #Add some sleep here

def testSleep(self):
    QtCore.QTimer.singleShot(2000, self.num)
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4

7
推荐指数
2
解决办法
6283
查看次数

Qthread 上的 QTimer

我有一个 GUI,我需要使用 Qtimer 不断更新,因为我使用工作 Qthread,这是我的代码:

from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
from PyQt5.QtCore import QThread, QTimer
import sys
import threading


class WorkerThread(QThread):
    def run(self):
        print("thread started from :" + str(threading.get_ident()))
        timer = QTimer(self)
        timer.timeout.connect(self.work)
        timer.start(5000)
        self.exec_()

    def work(self):
        print("working from :" + str(threading.get_ident()))
        QThread.sleep(5)


class MyGui(QWidget):

    worker = WorkerThread()

    def __init__(self):
        super().__init__()
        self.initUi()
        print("Starting worker from :" + str(threading.get_ident()))
        self.worker.start()

    def initUi(self):
        self.setGeometry(500, 500, 300, 300)
        self.pb = QPushButton("Button", self)
        self.pb.move(50, 50)
        self.show()


app = QApplication(sys.argv)
gui = MyGui()
app.exec_() …
Run Code Online (Sandbox Code Playgroud)

python pyqt qthread qtimer pyqt5

3
推荐指数
1
解决办法
6916
查看次数

标签 统计

pyqt ×3

python ×3

multithreading ×2

pyqt4 ×2

qthread ×2

c++ ×1

pyqt5 ×1

qt ×1

qtimer ×1