【问题标题】:Python: How can I refresh QLCDNumbers + emiting again after stoppingPython:如何在停止后刷新 QLCDNumbers + 再次发射
【发布时间】:2013-03-01 05:05:01
【问题描述】:

我想问在我开始一些措施后如何刷新 QLCDNumbers。 我创建了一个 GUI 线程来将信号连接到 QLCDNumbers,如下所示:

class BtDialog(QtGui.QDialog, Dlg):
  def __init__(self):
    QtGui.QDialog.__init__(self)
    self.setupUi(self)
    self.thread = WorkerThread()

    #Configure slots
    self.connect(self.startButton, QtCore.SIGNAL("clicked()"), self.onStart)
    self.connect(self.stopButton, QtCore.SIGNAL("clicked()"), self.onStop)

    #QLCDNumber Slot
    self.connect(self.thread, self.thread.voltage, self.lcdVoltage.display)

 def onStart(self):
    self.thread.start()

 def onStop(self):
     self.emit(self.thread.voltage, 0) #Trying to refresh
     abort()

这里我连接了两个按钮,一个用于启动工作线程,另一个用于停止进程。当我停止该过程时,我想通过显示“0”来刷新 QLCDNumber,但它不起作用。 在工作线程中,我像这样初始化信号:

def __init__(self, parent = None):
    QtCore.QThread.__init__(self, parent)
    self.voltage = QtCore.SIGNAL("voltage")

当进程运行时,我会发出信号

self.emit(self.voltage, volt_act)

测量后。到目前为止有效。但是在我想再次启动工作进程时停止后,信号不会再次发送到 QLCDNumber 。为此,我必须重新启动 GUI。如何解决我的两个问题,即我想在停止并刷新再次发出信号后刷新 QLCDNumber 和以上?

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    无法从您发布的代码中判断问题出在哪里,但这应该可以帮助您修改它,还可以查看 new-style signal/slot connectionsfurther reference (modal dialogs, timers, etc) 的文档:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    import time
    
    from PyQt4 import QtGui, QtCore
    
    class MyThread(QtCore.QThread):
        countChange = QtCore.pyqtSignal(int)
        countReset  = QtCore.pyqtSignal(int)
    
        def __init__(self, parent=None):
            super(MyThread, self).__init__(parent)
            self.stopped = QtCore.QEvent(QtCore.QEvent.User)
    
        def start(self):
            self.stopped.setAccepted(False)
            self.count = 0
    
            super(MyThread, self).start()
    
        def run(self):
            while not self.stopped.isAccepted():
                self.count += 1
                self.countChange.emit(self.count)
                time.sleep(1)
    
            self.countReset.emit(0)
    
        def stop(self):
            self.stopped.setAccepted(True)
    
    class MyWindow(QtGui.QDialog):
        def __init__(self, parent=None):
            super(MyWindow, self).__init__(parent)
    
            self.lcdNumber = QtGui.QLCDNumber(self)
    
            self.pushButtonStart = QtGui.QPushButton(self)
            self.pushButtonStart.setText("Start")
            self.pushButtonStart.clicked.connect(self.on_pushButtonStart_clicked)
    
            self.pushButtonStop = QtGui.QPushButton(self)
            self.pushButtonStop.setText("Stop")
            self.pushButtonStop.clicked.connect(self.on_pushButtonStop_clicked)
    
            self.pushButtonDone = QtGui.QPushButton(self)
            self.pushButtonDone.setText("Done")
            self.pushButtonDone.clicked.connect(self.on_pushButtonDone_clicked)
    
            self.layoutHorizontal = QtGui.QHBoxLayout(self)
            self.layoutHorizontal.addWidget(self.lcdNumber)
            self.layoutHorizontal.addWidget(self.pushButtonStart)
            self.layoutHorizontal.addWidget(self.pushButtonStop)
            self.layoutHorizontal.addWidget(self.pushButtonDone)
    
            self.thread = MyThread(self)
            self.thread.countChange.connect(self.lcdNumber.display)
            self.thread.countReset.connect(self.lcdNumber.display)
    
        @QtCore.pyqtSlot()
        def on_pushButtonStart_clicked(self):
            self.thread.start()
    
        @QtCore.pyqtSlot()
        def on_pushButtonStop_clicked(self):
            self.thread.stop()
    
        @QtCore.pyqtSlot()
        def on_pushButtonDone_clicked(self):
            sys.exit()
    
    if __name__ == "__main__":
        import sys
    
        app = QtGui.QApplication(sys.argv)
        app.setApplicationName('MyWindow')
    
        main = MyWindow()
        main.exec_()
    
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      相关资源
      最近更新 更多