打印循环的 PyQt4 Gui

Posted

技术标签:

【中文标题】打印循环的 PyQt4 Gui【英文标题】:PyQt4 Gui that prints loop 【发布时间】:2013-11-18 09:42:09 【问题描述】:

我正在尝试学习 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 个问题:

    为什么不打印“停止循环” 如果您想象循环是来自串行连接的数据流,我怎么能只打印每 10 个值。在循环中会是 1、11、21 ... 等等 我的代码中的常规 cmets

提前谢谢

【问题讨论】:

【参考方案1】:

在你的 else 部分添加以下行

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 等。和停止循环

【讨论】:

感谢您的帮助,赛义德!

以上是关于打印循环的 PyQt4 Gui的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4信号与槽

在循环中连接 PyQt4 中的插槽和信号

PyQT4 图形用户界面更新

在外部循环中更新 Tkinter GUI

如何在 PyQt4 创建的 GUI 中以富格式显示一些不可编辑的文本?

PyQt 4 UI 冻结