- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试制作一个监控硬件的应用程序,我想使用 Qthreadpool 而不是为每个小部件设置一个线程,但我在连接信号以显示输出时遇到了问题。我也没有收到任何错误。
我的旧代码运行良好并使用 QThread 显示它应该显示的内容:
import sys
from PyQt4 import QtCore, QtGuiimport ui
import time
import mem_stats
class MainClass(QtGui.QMainWindow, ui.Ui_MainWindow):
def __init__(self, parent= None):
super(MainClass, self).__init__(parent)
self.setupUi(self)
self.mem_worker = MemWorker()
self.mem_worker.start()
self.connect(self.mem_worker, QtCore.SIGNAL('MEM_STATS'),self.show_mem_stats)
def show_mem_stats(self, free_mem):
self.free_memory_lcd.display(free_mem)
class MemWorker(QtCore.QThread):
def __init__(self):
super(MemWorker, self).__init__()
def run(self):
while True:
free_mem = mem_stats.free_mem()
self.emit(QtCore.SIGNAL('MEM_STATS'), free_mem)
time.sleep(1)
if __name__ == '__main__':
a = QtGui.QApplication(sys.argv)
app = MainClass()
app.show()
sys.exit(a.exec_())
但是当我将 MemWorker 类更改为 QRunnable 时,代码运行时没有错误,但 QlcdNumber 不显示任何内容。
这是我的新代码:
import sys
from PyQt4 import QtCore, QtGui
import ui
import time
import mem_stats
class WorkerSignals(QtCore.QObject):
mem_signal = QtCore.pyqtSignal(int)
class MainClass(QtGui.QMainWindow, ui.Ui_MainWindow):
def __init__(self, parent= None):
super(MainClass, self).__init__(parent)
self.setupUi(self)
self.mem_worker = MemWorker()
self.thread_pool = QtCore.QThreadPool()
self.thread_pool.setMaxThreadCount(2)
self.connect(self.mem_worker.signal, QtCore.SIGNAL('MEM_STATS'), self.show_mem_stats)
def show_mem_stats(self, free_mem):
self.free_memory_lcd.display(free_mem)
self.thread_pool.start(self.mem_worker)
class MemWorker(QtCore.QRunnable):
def __init__(self):
super(MemWorker, self).__init__()
self.signal = WorkerSignals()
def run(self):
while True:
free_mem = mem_stats.free_mem()
self.signal.mem_signal.emit(QtCore.SIGNAL('MEM_STATS'), free_mem)
time.sleep(1)
if __name__ == '__main__':
a = QtGui.QApplication(sys.argv)
app = MainClass()
app.show()
sys.exit(a.exec_())
最佳答案
问题是你没有启动QRunnable
,你想在插槽中启动它,如果QRunnable
没有启动,它永远不会被调用。另一方面,目前推荐使用the new connection syntax。 ,最后推荐使用@pyqtSlot decorator
从 C++ 端建立连接,以更少的资源使其更快。
from PyQt4 import QtCore, QtGui
import ui
import time
import mem_stats
class WorkerSignals(QtCore.QObject):
mem_signal = QtCore.pyqtSignal(int)
class MainClass(QtGui.QMainWindow, ui.Ui_MainWindow):
def __init__(self, parent= None):
super(MainClass, self).__init__(parent)
self.setupUi(self)
self.mem_worker = MemWorker()
self.thread_pool = QtCore.QThreadPool()
self.thread_pool.setMaxThreadCount(2)
self.mem_worker.signal.mem_signal.connect(self.show_mem_stats)
self.thread_pool.start(self.mem_worker)
@QtCore.pyqtSlot(int)
def show_mem_stats(self, free_mem):
self.free_memory_lcd.display(free_mem)
class MemWorker(QtCore.QRunnable):
def __init__(self):
super(MemWorker, self).__init__()
self.signal = WorkerSignals()
def run(self):
while True:
ree_mem = mem_stats.free_mem()
self.signal.mem_signal.emit(free_mem)
time.sleep(1)
if __name__ == '__main__':
import sys
a = QtGui.QApplication(sys.argv)
app = MainClass()
app.show()
sys.exit(a.exec_())
关于python - 从 Qrunnable 连接一个 pyqtSignal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53053569/
是否可以中止 QRunnable 任务? 即使在文档中我也找不到任何方法。 非常感谢 最佳答案 不,您不能中止 QRunnable 任务。 在 Qt 中脏中止线程的唯一方法是通过 QThread::t
我正在尝试将指针 (ImageInput) 传递给 QRunnable::run() 方法。编译器编译,我没有得到任何错误。但是当我尝试在 run() 中使用变量时,程序崩溃了。有人知道错误在哪里吗?
QRunnable 在完成后被 QThreadPool 销毁。当我从它发出信号并尝试使用 sender() 从槽中获取 QRunnable 对象时,它为 NULL。 最小的例子: // class M
可以指出使用 QRunnable 作为 QtConcurrent 的替代方案的一些代码:我在 Qtdoc 中找不到任何 QRunnable 示例。 你有没有为同一个应用程序尝试过 QRunnable
在 QRunnable::run() 中发出信号是正确的做法吗?我需要通知我的 GUI 线程由 QRunnable 处理的图像已完成。我正在使用 QThreadPool/QRunnable 因为我需要
我正在编写一个路径跟踪器,并希望通过线程将其并行化。我有一个关于 QT 中多线程对象的设计问题,特别是关于 QRunnable 类。 在我下面的(伪代码)中,我有一个启动 PTRunnable 实例的
我正在尝试从 QRunnable 向我的主要 QObject 发送信号,但由于某种原因它没有接收到它们。 这样做正确吗? 这是一个小测试用例: import sys from PyQt4.QtGui
QRunnable 似乎没有sleep 方法。 如何在 QRunnable 中调用类似 QThread::sleep 的方法? 最佳答案 不要使用特定于平台的功能。 Qt 的最大优点是它非常容易移植。
我在 Qt 中有一些 I/O 代码已移至 QRunnable为了避免阻塞 UI 线程。这会用一些排队的插槽回调以指示其进度。 但是我最近看到了一些问题,当 QRunnable 的所有者时被销毁它不能删
我创建了简单的多线程服务器: 创建服务器 如果新连接创建新的 QThreadpool - QRunnable 在可运行中向客户端发送消息并等待请求 如果客户端被断开 runnable 写 qDebug
From a tutorial ,我已经看到信号和槽可用于从工作线程回调到主 GUI 线程,但我不确定如何使用信号和槽建立双向通信。以下是我正在使用的内容: class RespondedToWork
我遇到的是典型场景中的一个奇怪问题:QTcpServer 的方法 incomingConnection 在自定义类中被覆盖,并且任何接收到的连接都计划在 QThreadPool 上的单独线程中处理。
我正在尝试制作一个监控硬件的应用程序,我想使用 Qthreadpool 而不是为每个小部件设置一个线程,但我在连接信号以显示输出时遇到了问题。我也没有收到任何错误。 我的旧代码运行良好并使用 QThr
QThread 有一个完成信号,我可以在线程完成时做一些事情(连接到一个方法/函数),但是我也想用 QRunnable 做这件事。有没有办法在完成后将 QRunnable 线程连接到方法/函数? Q线
此代码段中出现此错误: void TCPConnectThread::run() { m_socket = new QTcpSocket(); m_socket->setSocketD
QThreads 和 QRunnable 有什么区别? 什么时候应该使用 QThread,什么时候使用 QRunnable? 最佳答案 QThread 可以运行事件循环,QRunnable 没有,所以
我知道一般的理论,线程,QRunnable 和 QThreadPool。它是如何适应的?我的意思是当 QRunnable 的一个实例被创建并分配给 ThreadPool 时,启动一个线程意味着什么?多
我正在用 C++ 编写 Qt 应用程序。我有一个在 QThreadPool 中运行的 QRunnable,它向主线程发送一个信号。问题是,连接不起作用:主线程从未接收到信号,即使我已经验证确实调用了执
我有一个在使用 Python3 的 PyQT4 应用程序中需要一段时间的过程。所以我一直在研究使用线程来加速它。数据可以很容易地被分解并循环处理。我正在使用自定义的 QRunnable,您可以在其中传
我正在使用 pyqt4。我有一个类 multi 继承自 QObject 和 QRunnable,如下所示: class DownloadTask(QObject, QRunnable): de
我是一名优秀的程序员,十分优秀!