Найти - Пользователи
Полная версия: Модуль time
Начало » GUI » Модуль time
1 2
Shading
            import time
            self.TimeToStart = 3;
            while(self.TimeToStart != 0):
                    self.InfoToStart.setText('До начала викторины : {} секунда(ы)'.format(self.TimeToStart))
                    self.TimeToStart -= 1
                    time.sleep(1)
Думаю понятно,что я хотел сделать,но никакого отсчета нет,ПО просто засыпает на 3 секунды и после выдает “ До начала викторины : 1 секунда(ы) ”
py.user.next
Выполни
sys.stdout.flush()
после setText() .
Shading
py.user.next
Выполни
Ничего не изменилось
py.user.next
Полный код выложи.
Shading
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_())

+ ui файл

<?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>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;		             Главное меню       &lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</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>
py.user.next
sys.stdout.flush() не пойдёт, как и time.sleep().

Вместо time.sleep() нужно использовать QTimer().
Shading
#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
Таймер тикает и посылает сигнал, сигнал подключается к слоту. А в слоте уже должно и выводиться сообщение, и счётчик уменьшаться.
Shading
py.user.next
Таймер тикает и посылает сигнал, сигнал подключается к слоту. А в слоте уже должно и выводиться сообщение, и счётчик уменьшаться.

Я как только не пробовал. Что я не так делаю?
Создаю таймер
self.timer = QTimer()
Каждую секунду ссылаюсь на Слот _update
  self.timer.timeout.connect(self._update)
            self.timer.start(1000)
И вот собственно само сообщение с уменьшением секунд
def _update(self):
        self.InfoToStart.setText('До начала викторины : {} секунда(ы)'.format(self.TimeToStart))
self.TimeToStart -= 1
py.user.next
Пример таймера, который сначала работает, потом останавливается.
#!/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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB