相关疑难解决方法(0)

PyQt4在线程中等待来自GUI的用户输入

我有一个线程类"MyThread"和我的主要应用程序,简称为"Gui".我想从线程类创建一些对象,但是对于这个例子,我只创建了一个对象.线程类做了一些工作,然后向Gui类发出一个信号,指示需要用户输入(此指示现在只是更改按钮的文本).然后线程应该等待用户输入(在这种情况下是一个按钮点击),然后继续做它正在做的事情......

from PyQt4 import QtGui, QtCore
class MyTrhead(QtCore.QThread):
    trigger = QtCore.pyqtSignal(str)

    def run(self):
        print(self.currentThreadId())
        for i in range(0,10):
            print("working ")
            self.trigger.emit("3 + {} = ?".format(i))
            #### WAIT FOR RESULT
            time.sleep(1)


class Gui(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(Gui, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.btn)

        self.t1 = MyTrhead()
        self.t1.trigger.connect(self.dispaly_message)
        self.t1.start()
        print("thread: {}".format(self.t1.isRunning()))


    @QtCore.pyqtSlot(str)
    def dispaly_message(self, mystr):
        self.pushButton.setText(mystr)

    def btn(self):
        print("Return result to corresponding thread")



if "__main__" == __name__:
    import sys
    app = QtGui.QApplication(sys.argv)
    m = Gui()
    m.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

如何在(多个)线程中等待用户输入?

python multithreading pyqt pyqt4 python-3.x

7
推荐指数
1
解决办法
4298
查看次数

在 PyQt5 中停止工作线程中的无限循环最简单的方法

我打算有一个 GUI,其中一个(后来三个)线程以可调整的间隔(例如 10 秒)从不同源读取实时数据,并在主窗口中绘制这些数据。

我正在使用 PyQt5 和 python 3.6。

读取是在工作线程中无限循环中执行的,如下所示:

class ReadingThread(QtCore.QObject):
    output = QtCore.pyqtSignal(object)

    def __init__(self, directory, interval):
        QtCore.QObject.__init__(self)
        self.directory=directory
        self.stillrunning = True
        self.refreshtime = interval
    

    def run(self):
        print('Entered run in worker thread')
        self.stillrunning = True

        while self.stillrunning:
            outstring=self.read_last_from_logfile()  # data reader function, not displayed

            self.output.emit(outstring)
            time.sleep(self.refreshtime)


    @QtCore.pyqtSlot(int)  # never called as loop is blocking?
    def check_break(self, val):
        if val:
            self.stillrunning=False
        else:
            self.stillrunning = True
Run Code Online (Sandbox Code Playgroud)

主线程如下所示,start() 和 stop() 通过按钮调用:

class Window(QtWidgets.QMainWindow, MainWindow.Ui_MainWindow):
    def __init__(self, directory, interval):
        super(Window, self).__init__()
        self.thread …
Run Code Online (Sandbox Code Playgroud)

python multithreading pyqt5

2
推荐指数
1
解决办法
3072
查看次数

标签 统计

multithreading ×2

python ×2

pyqt ×1

pyqt4 ×1

pyqt5 ×1

python-3.x ×1