打印循环的PyQt4 Gui

时间:2013-11-18 09:42:10

标签: python python-2.7 pyqt4 pyserial

我正在尝试学习PyQt4并为此目的制作了以下Gui - 它没有其他用途。

代码几乎按预期工作 - 唯一没有的是'else'子句。

import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Form(QDialog):
    def __init__ (self, parent=None):
        super(Form, self).__init__(parent)
        self.startButton = QPushButton('Start')
        self.stopButton = QPushButton('Stop')
        self.browser = QTextBrowser()
        self.myLabel = QLabel()
        layout = QVBoxLayout()
        layout.addWidget(self.startButton)
        layout.addWidget(self.stopButton)
        layout.addWidget(self.browser)
        layout.addWidget(self.myLabel)
        self.setLayout(layout)
        self.startButton.setFocus()
        self.startButton.clicked.connect(self.guiLoop)
        self.stopButton.clicked.connect(self.guiLoop)
        self.setWindowTitle('Loop Gui')


    def guiLoop(self):
        state = False
        text = self.sender()
        self.myLabel.setText(text.text())
        time.sleep(1)
        if text.text() == 'Start':
            state = True
        else:
            state = False
        i = 0
        while state:
            time.sleep(.1)
            self.browser.append(str(i))
            QApplication.processEvents()
            i += 1
        else:
            self.browser.append('Stop loop')
            time.sleep(3)
            sys.exit()

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

...我希望程序在退出之前在浏览器小部件中打印“停止循环”,但它不会

       else:
            self.browser.append('Stop loop')
            time.sleep(3)
            sys.exit()

我现在有3个问题:

  1. 为什么不打印'停止循环'
  2. 如果您认为循环是来自串行连接的数据流,我怎么才能只打印每10个值。在循环中将是1,11,21 ......等等
  3. 对我的代码的一般评论
  4. 提前谢谢

1 个答案:

答案 0 :(得分:1)

在您的其他部分

中添加以下行
QApplication.processEvents()

while state:
    time.sleep(.1)
    if i % 10 == 1:
        self.browser.append(str(i))
        QApplication.processEvents()
    i += 1
else:
    self.browser.append('Stop loop')
    QApplication.processEvents()
    time.sleep(3)
    sys.exit()

输出如:1 11 21 31等..和停止循环