【问题标题】:PyQt - showing countdown timerPyQt - 显示倒数计时器
【发布时间】:2017-04-21 00:32:42
【问题描述】:

我正在尝试使用 PyQt 创建一个程序,该程序目前由 4 个页面的堆叠小部件组成。实现了一个计时器,3 秒后用户当前所在的页面切换到下一页。我目前正在尝试添加一个计时器,该计时器向用户显示他们在该页面上剩余的时间(理想情况下以秒为单位)。但是,我不知道如何将计时器连接到计数器,也找不到任何有用的东西。

这是当前的代码,基本上就是定时器:

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

app = QApplication(sys.argv)


window = QMainWindow()


ui = Ui_MainWindow()
ui.setupUi(window)


def NextTimer():
   ui.stackedWidget.setCurrentIndex((ui.stackedWidget.currentIndex() + 1))


myTimer = QTimer()
myTimer.timeout.connect(NextTimer)
myTimer.start(3000)

我正在尝试将计时器连接到 QLCDNumber 类的计数器,标记为计数器。目前没有涉及此计数器的代码,它只是存在。

感谢您的帮助。

【问题讨论】:

  • 使用QLCDNumber 创建最小的工作示例,以便每个人都可以对其进行测试并创建解决方案。

标签: python python-3.x timer pyqt


【解决方案1】:

以下是 PyQt5 中如何实现您描述的功能的工作示例:

import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets

DURATION_INT = 3


class MyMainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.time_left_int = DURATION_INT
        self.widget_counter_int = 0

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        vbox = QtWidgets.QVBoxLayout()
        central_widget.setLayout(vbox)

        self.pages_qsw = QtWidgets.QStackedWidget()
        vbox.addWidget(self.pages_qsw)
        self.time_passed_qll = QtWidgets.QLabel()
        vbox.addWidget(self.time_passed_qll)

        self.widget_one = QtWidgets.QLabel("This is widget one")
        self.pages_qsw.addWidget(self.widget_one)
        self.widget_two = QtWidgets.QLabel("This is widget two")
        self.pages_qsw.addWidget(self.widget_two)
        self.widget_three = QtWidgets.QLabel("This is widget three")
        self.pages_qsw.addWidget(self.widget_three)
        self.widget_four = QtWidgets.QLabel("This is widget four")
        self.pages_qsw.addWidget(self.widget_four)

        self.timer_start()
        self.update_gui()

    def timer_start(self):
        self.time_left_int = DURATION_INT

        self.my_qtimer = QtCore.QTimer(self)
        self.my_qtimer.timeout.connect(self.timer_timeout)
        self.my_qtimer.start(1000)

        self.update_gui()

    def timer_timeout(self):
        self.time_left_int -= 1

        if self.time_left_int == 0:
            self.widget_counter_int = (self.widget_counter_int + 1) % 4
            self.pages_qsw.setCurrentIndex(self.widget_counter_int)
            self.time_left_int = DURATION_INT

        self.update_gui()

    def update_gui(self):
        self.time_passed_qll.setText(str(self.time_left_int))


app = QtWidgets.QApplication(sys.argv)
main_window = MyMainWindow()
main_window.show()
sys.exit(app.exec_())

我希望这会有所帮助!

【讨论】:

  • 嘿@sunyata 你的代码确实帮助了我。但我不知道如何在我的应用程序的单独窗口中运行它。我已经有一个最初打开的“主窗口”,单击按钮时,我希望显示计时器窗口。我需要两个不同的课程吗?我不能运行两个单独的应用程序,所以它必须在一个..
  • @sonja 嗨,很高兴这对您有所帮助!对于您的情况,我可能会从 QDialog 继承以获得新窗口。 (不过,您需要稍微更改布局代码,QDialog 中没有任何“setCentralWidget”函数)。如果您需要更多帮助,请随时通过 gitter 与我联系:gitter.im/SunyataZero
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多