篮球比框大 2019-11-04 01:26 采纳率: 0%
浏览 380

python 的 PyQT5 问题

我按照例子改写,改写结束不能正常运行。(原来的代码写在 后面)

以下是我的代码

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

global sec
sec = 0



class WorkThread(QThread):
    trigger = pyqtSignal()

    def __int__(self):
        super(WorkThread, self).__init__()

    def run(self):
        for i in range(2000000000):
            pass

        # 循环完毕后发出信号
        self.trigger.emit()

class MainTimer(QWidget):
    def __init__(self):
        super(MainTimer, self).__init__()

        self.initUI()
    def initUI(self):

        layout = QVBoxLayout(self)

        # 添加控件
        lcdNumber = QLCDNumber()
        layout.addWidget(lcdNumber)
        self.button = QPushButton("测试")
        layout.addWidget(self.button)
        # timer = QTimer()


        # 连接测试按钮和槽函数work

        self.timer = QTimer()
        self.workThread = WorkThread()

        self.button.clicked.connect(self.work)
        # 每次计时结束,触发setTime
        self.timer.timeout.connect(self.countTime)


        self.resize(300, 120)
        self.show()

    def work(self):
        # 计时器每秒计数
        self.timer.start(1000)
        # 计时开始
        self.workThread.start()
        # 当获得循环完毕的信号时,停止计数
        self.workThread.trigger.connect(self.timeStop)

    def countTime(self):
        global sec
        sec += 1
        # LED显示数字+1
        self.lcdNumber.display(sec)

    def timeStop(self):
        self.timer.stop()
        print("运行结束用时", self.lcdNumber.value())
        global sec
        sec = 0


if __name__ == "__main__":
    app = QApplication(sys.argv)
    top = MainTimer()

    # top.show()
    sys.exit(app.exec_())

下边是原来代码代码 :

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

global sec
sec = 0

# 增加了一个继承自QThread类的类,重新写了它的run()函数
# run()函数即是新线程需要执行的:执行一个循环;发送计算完成的信号。
class WorkThread(QThread):
    trigger = pyqtSignal()

    def __int__(self):
        super(WorkThread, self).__init__()

    def run(self):
        for i in range(2000000000):
            pass

        # 循环完毕后发出信号
        self.trigger.emit()


def countTime():
    global sec
    sec += 1
    # LED显示数字+1
    lcdNumber.display(sec)


def work():
    # 计时器每秒计数
    timer.start(1000)
    # 计时开始
    workThread.start()
    # 当获得循环完毕的信号时,停止计数
    workThread.trigger.connect(timeStop)


def timeStop():
    timer.stop()
    print("运行结束用时", lcdNumber.value())
    global sec
    sec = 0


if __name__ == "__main__":
    app = QApplication(sys.argv)
    top = QWidget()
    top.resize(300, 120)

    # 垂直布局类QVBoxLayout
    layout = QVBoxLayout(top)

    # 加个显示屏
    lcdNumber = QLCDNumber()
    layout.addWidget(lcdNumber)
    button = QPushButton("测试")
    layout.addWidget(button)

    timer = QTimer()
    workThread = WorkThread()

    button.clicked.connect(work)

    # 每次计时结束,触发 countTime
    timer.timeout.connect(countTime)

    top.show()
    sys.exit(app.exec_())



  • 写回答

1条回答

  • zqbnqsdsmd 2019-11-04 12:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料