PyQt4 Gui, который печатает цикл

Я пытаюсь изучить PyQt4 и сделал для этой цели следующий графический интерфейс - другого применения у него нет.

Код работает почти так, как ожидалось, единственное, что не работает, это предложение 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_()

... Я ожидаю, что программа напечатает «Stop loop» в виджете браузера перед выходом, но это не так.

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

Теперь у меня есть 3 вопроса:

  1. Почему он не печатает «Стоп-цикл»
  2. Если вы представляете, что цикл вместо этого был потоком данных из последовательного соединения, как я мог напечатать только каждое 10-е значение. В цикле это будет 1, 11, 21... и так далее
  3. Общие комментарии к моему коду

Спасибо заранее


person user2739064    schedule 18.11.2013    source источник


Ответы (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 и т. д. и Stop Loop

person Syed Habib M    schedule 18.11.2013
comment
Спасибо за помощь, Сайед! - person user2739064; 18.11.2013