Форум сайта python.su
import time self.TimeToStart = 3; while(self.TimeToStart != 0): self.InfoToStart.setText('До начала викторины : {} секунда(ы)'.format(self.TimeToStart)) self.TimeToStart -= 1 time.sleep(1)
Офлайн
Выполни
sys.stdout.flush()
Офлайн
py.user.nextНичего не изменилось
Выполни
Офлайн
Полный код выложи.
Офлайн
py.user.next
Полный код выложи.
#coding: utf8 import sys,time from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QApplication, QDialog from PyQt5.uic import loadUiType app = QApplication(sys.argv) app.setApplicationName('Викторина') form_class, base_class = loadUiType('MainWindow.ui') class MainWindow(QDialog, form_class): def __init__(self, *args): super(MainWindow, self).__init__(*args) self.TimeToStart = 3 # Кол-во секунд до старта self.setupUi(self) def GameStart(self): self.GameStatus.setText("Подготовка к игре") self.Hello.hide() self.szGameStart.hide() self.szGameExit.hide() while(self.TimeToStart != 0): self.InfoToStart.setText('До начала викторины : {} секунда(ы)'.format(self.TimeToStart)) sys.stdout.flush() self.TimeToStart -= 1 time.sleep(1) def GameExit(self): sys.exit(app.exec_()) #--------------------------------------------------------# form = MainWindow() form.setWindowTitle('Викторина') form.show() sys.exit(app.exec_())
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Form</class> <widget class="QWidget" name="Form"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>513</width> <height>438</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <widget class="QLabel" name="Hello"> <property name="enabled"> <bool>true</bool> </property> <property name="geometry"> <rect> <x>110</x> <y>50</y> <width>301</width> <height>31</height> </rect> </property> <property name="font"> <font> <family>Plantagenet Cherokee</family> <pointsize>12</pointsize> <weight>75</weight> <italic>false</italic> <bold>true</bold> </font> </property> <property name="mouseTracking"> <bool>true</bool> </property> <property name="layoutDirection"> <enum>Qt::LeftToRight</enum> </property> <property name="text"> <string>Добро пожаловать на викторину</string> </property> <property name="textFormat"> <enum>Qt::AutoText</enum> </property> </widget> <widget class="QTextBrowser" name="GameStatus"> <property name="enabled"> <bool>true</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>531</width> <height>21</height> </rect> </property> <property name="html"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;"> Главное меню </span></p> <p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></string> </property> </widget> <widget class="QPushButton" name="szGameStart"> <property name="enabled"> <bool>true</bool> </property> <property name="geometry"> <rect> <x>170</x> <y>110</y> <width>161</width> <height>23</height> </rect> </property> <property name="text"> <string>Начать игру</string> </property> </widget> <widget class="QPushButton" name="szGameExit"> <property name="enabled"> <bool>true</bool> </property> <property name="geometry"> <rect> <x>170</x> <y>140</y> <width>161</width> <height>23</height> </rect> </property> <property name="text"> <string>Выйти</string> </property> </widget> <widget class="QLabel" name="InfoToStart"> <property name="geometry"> <rect> <x>40</x> <y>210</y> <width>491</width> <height>31</height> </rect> </property> <property name="font"> <font> <family>Nirmala UI</family> <pointsize>20</pointsize> </font> </property> <property name="text"> <string> </string> </property> <property name="scaledContents"> <bool>false</bool> </property> </widget> </widget> <tabstops> <tabstop>szGameExit</tabstop> <tabstop>GameStatus</tabstop> <tabstop>szGameStart</tabstop> </tabstops> <resources> <include location="../../Desktop/123.png"/> </resources> <connections> <connection> <sender>szGameStart</sender> <signal>clicked()</signal> <receiver>Form</receiver> <slot>GameStart()</slot> <hints> <hint type="sourcelabel"> <x>250</x> <y>121</y> </hint> <hint type="destinationlabel"> <x>256</x> <y>218</y> </hint> </hints> </connection> <connection> <sender>szGameExit</sender> <signal>clicked()</signal> <receiver>Form</receiver> <slot>GameExit()</slot> <hints> <hint type="sourcelabel"> <x>250</x> <y>151</y> </hint> <hint type="destinationlabel"> <x>256</x> <y>218</y> </hint> </hints> </connection> </connections> <slots> <slot>GameStart()</slot> <slot>GameExit()</slot> </slots> </ui>
Офлайн
sys.stdout.flush() не пойдёт, как и time.sleep().
Вместо time.sleep() нужно использовать QTimer().
Отредактировано py.user.next (Июнь 5, 2016 12:03:46)
Офлайн
#coding: utf8 import sys from PyQt5.QtCore import ( pyqtSlot, QTimer ) from PyQt5.QtWidgets import ( QApplication, QDialog ) from PyQt5.uic import loadUiType app = QApplication(sys.argv) app.setApplicationName('Викторина') form_class, base_class = loadUiType('MainWindow.ui') class MainWindow(QDialog, form_class): def __init__(self, *args): super(MainWindow, self).__init__(*args) self.TimeToStart = 3 # Кол-во секунд до старта self.setupUi(self) def GameStart(self): self.GameStatus.setText("Подготовка к игре") self.Hello.hide() self.szGameStart.hide() self.szGameExit.hide() self.timer = QTimer() while(self.TimeToStart != 0): self.TimeToStart -= 1 self.timer.timeout.connect(self._update) self.timer.start(1000) def GameExit(self): sys.exit(app.exec_()) def _update(self): self.InfoToStart.setText('До начала викторины : {} секунда(ы)'.format(self.TimeToStart)) #--------------------------------------------------------# form = MainWindow() form.setWindowTitle('Викторина') form.show() sys.exit(app.exec_())
Офлайн
Таймер тикает и посылает сигнал, сигнал подключается к слоту. А в слоте уже должно и выводиться сообщение, и счётчик уменьшаться.
Офлайн
py.user.next
Таймер тикает и посылает сигнал, сигнал подключается к слоту. А в слоте уже должно и выводиться сообщение, и счётчик уменьшаться.
self.timer = QTimer()
self.timer.timeout.connect(self._update) self.timer.start(1000)
def _update(self): self.InfoToStart.setText('До начала викторины : {} секунда(ы)'.format(self.TimeToStart)) self.TimeToStart -= 1
Отредактировано Shading (Июнь 6, 2016 09:54:09)
Офлайн
Пример таймера, который сначала работает, потом останавливается.
#!/usr/bin/env python3 import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.label = QtGui.QLabel('text', self) self.timer = QtCore.QTimer(self) self.timer.timeout.connect(self.tick) self.timer.start(1000) self.n = 10 layout = QtGui.QHBoxLayout(self) layout.addWidget(self.label) self.setLayout(layout) self.setGeometry(500, 500, 200, 100) self.setWindowTitle('Timer') self.show() def tick(self): self.label.setText(self.label.text() + '.') if self.n > 0: self.n -= 1 else: self.label.setText(self.label.text() + '|') self.timer.stop() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
Офлайн