鱼C论坛

 找回密码
 立即注册
查看: 4033|回复: 11

[已解决]pyqt5进度条代码问题

[复制链接]
发表于 2018-4-21 11:54:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'G:\程序\gui\jindu.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(535, 402)
        self.layoutWidget = QtWidgets.QWidget(Form)
        self.layoutWidget.setGeometry(QtCore.QRect(90, 150, 291, 91))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.jindu = QtWidgets.QProgressBar(self.layoutWidget)
        self.jindu.setProperty("value", 0)
        self.jindu.setObjectName("jindu")
        self.verticalLayout.addWidget(self.jindu)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.star = QtWidgets.QPushButton(self.layoutWidget)
        self.star.setObjectName("star")
        self.horizontalLayout.addWidget(self.star)
        spacerItem = QtWidgets.QSpacerItem(78, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.stor = QtWidgets.QPushButton(self.layoutWidget)
        self.stor.setObjectName("stor")
        self.horizontalLayout.addWidget(self.stor)
        self.verticalLayout.addLayout(self.horizontalLayout)

        self.retranslateUi(Form)
        self.stor.clicked.connect(self.jindu.reset)
        self.star.clicked.connect(self.panduan)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "进度条"))
        self.star.setText(_translate("Form", "开始"))
        self.stor.setText(_translate("Form", "结束"))
        self.timer=QtCore.QBasicTimer()
        self.step=0
    def timeEvent(self,*args,**kwargs):
        if self.step>=100:
            self.timer.stop()
            self.star.setText('完成')
            return
        self.step+=1
        self.jindu.setValue(self.step)
    def panduan(self):
        if self.timer.isActive():
            self.timer.stop()
            self.star.setText("运行")
        else:
            # 立马激活进度条  启动 开始执行
            self.timer.start(100, self)         #本行报错
            self.star.setText("停止")







if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

先用qt设计师排好布局,然后用pycharm写了个槽函数。self.timer.start(100,self)这一行总是报错:start(self, int, Qt.TimerType, QObject): argument 2 has unexpected type 'Ui'。。感觉代码没问题呀。。求大神解答
最佳答案
2018-4-21 14:45:19
弟大勿波 发表于 2018-4-21 14:28
第一种就是用eric6从 ui转成的py。跟自己写的定义不太一样。我也没太看懂他定义的方式 。。

pyqt5好像一般都是界面逻辑分离写法比较好,
你在逻辑生成类再继承一下Ui和QWidget
相关逻辑函数在新类里写
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-21 12:32:30 | 显示全部楼层
对象要求Qt的Timer类型,你用了QWidget()传参吧,虽然我的pyqt才刚看了个皮,不知道说的对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-21 12:48:34 | 显示全部楼层
塔利班 发表于 2018-4-21 12:32
对象要求Qt的Timer类型,你用了QWidget()传参吧,虽然我的pyqt才刚看了个皮,不知道说的对不对

应该不是。我直接用代码敲出来没问题。但是先用qt设计师排版布局好加进去就有问题。。

以下是直接敲的代码
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'cs3.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

# -*- coding: utf-8 -*-
'''
@author:Fenge
date:2017-6-17
'''

# !/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt5 import QtCore,QtWidgets,QtGui
import sys

class Jindutiao_ui(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.ui()

    def ui(self):
        self.setWindowTitle('进度条')
        self.setGeometry(500,500,300,200)
        self.setWindowIcon(QtGui.QIcon('1.ico'))
        self.setToolTip('进度条程序')
        self.qidong=QtWidgets.QPushButton('开始',self)
        self.qidong.setIcon(QtGui.QIcon('2.ico'))
        self.tingzhi=QtWidgets.QPushButton('停止',self)
        self.tingzhi.setIcon(QtGui.QIcon('3.ico'))
        self.jindutiao=QtWidgets.QProgressBar()
        self.timer=QtCore.QBasicTimer()
        self.step=0
        shuip=QtWidgets.QHBoxLayout()
        shuip.addWidget(self.qidong)
        shuip.addWidget(self.tingzhi)
        shuip.setSpacing(50)
        cuiz=QtWidgets.QVBoxLayout()
        cuiz.addWidget(self.jindutiao)
        cuiz.addLayout(shuip)
        self.setLayout(cuiz)
        self.qidong.clicked.connect(self.pd)
        self.tingzhi.clicked.connect(self.tz)
        self.show()
    def timerEvent(self, *args, **kwargs):
        if self.step>=100:
            self.timer.stop()
            self.qidong.setText('完成')
            return
        self.step+=1
        self.jindutiao.setValue(self.step)
    def pd(self):
        if  self.timer.isActive():
            self.qidong.setText('启动')
            self.timer.stop()
        else:
            self.timer.start(100,self)
            self.qidong.setText('暂停')
    def tz(self):
        self.step=0
        self.jindutiao.setValue(0)
        self.timer.stop()
        self.qidong.setText('启动')


app=QtWidgets.QApplication(sys.argv)
jd=Jindutiao_ui()
sys.exit(app.exec_())
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 12:52:04 | 显示全部楼层
那你看看QtDesigner自动生成的ui转换成py和你的有什么差别
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-21 13:28:45 | 显示全部楼层
塔利班 发表于 2018-4-21 12:52
那你看看QtDesigner自动生成的ui转换成py和你的有什么差别

上面那段就是ui生成的py。判断部分是自己后面写的。一样的呀。。没发现有什么异常~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 13:31:41 | 显示全部楼层
弟大勿波 发表于 2018-4-21 13:28
上面那段就是ui生成的py。判断部分是自己后面写的。一样的呀。。没发现有什么异常~~

你都发出来,让大家来找茬就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 14:26:06 | 显示全部楼层
我觉得你第一种定义有问题,你的正常方法在初始就给Jindutiao_ui初始化,而且继承于QtWidgets.QWidget,满足
start里self是QObject条件
而第一个定义时self并不是QObject,继承的类名我好像也没见过,你定义了object了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-21 14:28:54 | 显示全部楼层
塔利班 发表于 2018-4-21 14:26
我觉得你第一种定义有问题,你的正常方法在初始就给Jindutiao_ui初始化,而且继承于QtWidgets.QWidget,满 ...

第一种就是用eric6从 ui转成的py。跟自己写的定义不太一样。我也没太看懂他定义的方式 。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 14:33:52 | 显示全部楼层
弟大勿波 发表于 2018-4-21 14:28
第一种就是用eric6从 ui转成的py。跟自己写的定义不太一样。我也没太看懂他定义的方式 。。

ojbect对象可大了,祖爷爷辈儿的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 14:45:19 | 显示全部楼层    本楼为最佳答案   
弟大勿波 发表于 2018-4-21 14:28
第一种就是用eric6从 ui转成的py。跟自己写的定义不太一样。我也没太看懂他定义的方式 。。

pyqt5好像一般都是界面逻辑分离写法比较好,
你在逻辑生成类再继承一下Ui和QWidget
相关逻辑函数在新类里写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-21 15:45:24 | 显示全部楼层
塔利班 发表于 2018-4-21 14:45
pyqt5好像一般都是界面逻辑分离写法比较好,
你在逻辑生成类再继承一下Ui和QWidget
相关逻辑函数在新类 ...

还是报错。不知道为什么。谢谢了。继续往后看了。看到后面说不定就明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-21 15:48:04 | 显示全部楼层
塔利班 发表于 2018-4-21 14:45
pyqt5好像一般都是界面逻辑分离写法比较好,
你在逻辑生成类再继承一下Ui和QWidget
相关逻辑函数在新类 ...

还是报错。不知道为什么。谢谢了。继续往后看了。看到后面说不定就明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-10 18:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表