社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

PyQt Qthread类报错

2818589609 • 4 年前 • 353 次点击  

现有一个PyQt5程序,当我把work函数,countTime函数及timeStop函数缩进到QThreadl类中,运行程序点击测试的时候就会提 work() takes 0 positional arguments but 2 were given 对类的理解还不是很到位,有没有大神解答一下如果把work等函数放入class中应该怎样处理才不会报错 正确代码如下:

# -*- coding: utf-8 -*- 
'''
    【简介】
    PyQT5中 QTimer例子


'''

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()        

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_())

报错的代码如下: `# -- coding: utf-8 -- ''' 【简介】 PyQT5中 QTimer例子

'''

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()

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(workThread.work)
# 每次计时结束,触发 countTime
timer.timeout.connect(workThread.countTime)

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

`

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38669
 
353 次点击