Py学习  »  Python

PyQt Qthread类报错

2818589609 • 6 年前 • 747 次点击  

现有一个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