小飞友 2022-04-12 18:23 采纳率: 60%
浏览 20
已结题

我正在使用多线程做一个下载器,问题是调用多线程时老是说没有start()这个方法

我正在使用多线程做一个下载器,问题是调用多线程时老是说没有start()这个方法,代码如下
try:
    #---------------------------------------
    import logging,time
    import os
    import datetime
    import sys
    import subprocess
    import requests
    import cgitb
    cgitb.enable(format='text')
    from PyQt5.QtCore import Qt
    from PyQt5.QtGui import *
    from PyQt5.Qt import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    #---------------------------------------
    class BugReport_UI(QMainWindow):
        def __init__(self):
            super().__init__()
            self.user=os.getlogin()
            self.is_showDetail=False
            self.headers={
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'}
            self.ui()
        def ui(self):
            #Temp
            if not os.path.exists('temp'):
                os.makedirs('temp')
            #Read
            error=open('error_easy.txt','r',encoding='utf-8')
            errorText=error.read()
            error.close()
            errorDet=open('Downloader_log.log','r',encoding='utf-8')
            errorDetText=errorDet.read()
            errorDet.close()
            #UI
            self.resize(390,220)
            self.setWindowIcon(QApplication.style().standardIcon(11))
            self.setWindowTitle('高速下载器 - 错误反馈')
            self.setFixedSize(self.width(),self.height())
            #errorIcon
            self.errorIcon=QPushButton(self)
            self.errorIcon.setIconSize(QSize(32,32))
            self.errorIcon.resize(32,32)
            self.errorIcon.move(25,20)
            self.errorIcon.setIcon(QApplication.style().standardIcon(11))
            self.errorIcon.setStyleSheet('border:0px;')
            self.errorIcon.show()
            #Reinstall
            try:
                self.ReinstallBtn=QPushButton(self)
                self.ReinstallBtn.setText('重新安装程序')
                self.ReinstallBtn.move(10,355)
                self.ReinstallBtn.show()
                self.ReinstallBtn.clicked.connect(lambda:self.clicked())
            except Exception as error:
                print(error)
            #longText
            self.longText=QLabel(self)
            self.longText.resize(395,55)
            self.longText.setStyleSheet('font-family:Microsoft Yahei;font-size:15px')
            self.longText.setText('程序中出现了错误(异常),需要修复,'+'\n'+'给您带来的不便,我们很是抱歉。错误如下:')
            self.longText.move(65,20)
            self.longText.show()
            #errorText1
            self.error_=QTextEdit(self)
            self.error_.resize(370,100)
            self.error_.setLineWrapMode(False)
            self.error_.setStyleSheet('font-family:Microsoft Yahei;font-size:15px;color:red;')
            self.error_.setText(errorText+'\n'+'如果您发现重启程序没有起作用的话,可以尝试重新安装程序。')
            self.error_.move(10,70)
            self.error_.setReadOnly(True)
            self.error_.show()
            #ok
            self.ok=QPushButton(self)
            self.ok.setText('确定')
            self.ok.move(280,180)
            self.ok.clicked.connect(lambda:self.exit())
            self.ok.show()
            #restart
            self.restart=QPushButton(self)
            self.restart.setText('重启程序')
            self.restart.move(150,180)
            self.restart.clicked.connect(lambda:self.restart_())
            self.restart.show()
            #ShowDetails
            self.ShowDetails=QPushButton(self)
            self.ShowDetails.setText('展示细节>>')
            self.ShowDetails.setDefault(True)
            self.ShowDetails.move(20,180)
            self.ShowDetails.setAutoRepeat(True)
            self.ShowDetails.clicked.connect(lambda:self.resizeS_())
            self.ShowDetails.show()
            #TextEdit
            self.errorText=QTextEdit(self)
            self.errorText.resize(370,120)
            self.errorText.move(10,230)
            self.errorText.setPlainText(errorDetText)
            self.errorText.setReadOnly(True)
            self.errorText.setLineWrapMode(False)
            self.errorText.setStyleSheet('font-family:Microsoft Yahei;font-size:13px;color:red;')
            self.errorText.show()
        def resizeS_(self):
            print('1')
            if not self.is_showDetail:
                self.is_showDetail=True
                self.setFixedSize(QSize(390,390))
                self.ShowDetails.setText('收起细节<<')
                self.update()
            else:
                self.is_showDetail=False
                self.setFixedSize(QSize(390,220))
                self.ShowDetails.setText('展示细节>>')
                self.update()
        def restart_(self):
            subprocess.Popen('Downloader.pyw',shell=True)
            self.destroy()
        def exit(self):
            cl=open('error_easy.txt','w',encoding='utf-8')
            cl.write('')
            cl1=open('Downloader_log.log','w',encoding='utf-8')
            cl1.write('')
            cl.close()
            cl1.close()
            self.destroy()
        def clicked(self):
            self.thread_=RunThread()
            self.thread_.start()
    main=BugReport_UI
    class RunThread(QThread):
        signal_=pyqtSignal(str)
        def __init__(self):
            super(RunThread,self).__init__()
            self.info='Thread'
        def __del__(self):
            self.wait()
        def run(self):
            try:
                main.error_.clear()
                try:
                    self.head=requests.head('https://issuecdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_7.2.8.9.exe',headers=main.headers)
                    main.error_.insertPlainText('获取请求头中...'+'\n')
                except Exception as error:
                    print(error)
                #----------------------------------------
                self.content=self.head.content
                self.filesize=int(self.head.headers.get('Content-Length'))
                #----------------------------------------
                try:
                    self.response=requests.get('https://issuecdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_7.2.8.9.exe',headers=main.headers,stream=True)
                    main.error_.insertPlainText('获取请求中...'+'\n')
                except Exception as error:
                    print(error)
                #----------------------------------------
                Read=0
                ChunkSize=1024*600
                with open('C:/Users/{0}/desktop'.format(main.user)+'/'+'高速下载器安装包.exe','wb') as write_file:
                    for chunk in self.response.iter_content(chunk_size=ChunkSize):
                        Read+=ChunkSize
                        Read=min(Read,self.filesize)
                        write_file.write(chunk)
                        main.error_.insertPlainText('下载进度:'+str(((Read/self.filesize)*100))+'\n')
                main.error_.setPlainText('下载完成。下载到了桌面。'+'\n')
            except Exception as error:
                print(error)
    #---------------------------------------
    Application=QApplication(sys.argv)
    main=BugReport_UI()
    main.show()
    sys.exit(Application.exec_())
    #---------------------------------------
except Exception as error:
    #QMessageBox.critical(None,'提示',str(error),QMessageBox.Yes|QMessageBox.Yes)
    print(error)
finally:
    for file in os.listdir('temp'):
        os.remove('temp/'+file)
    print('exit')
  • 写回答

1条回答 默认 最新

  • 杉杉锅锅 2022-04-12 18:49
    关注

    main = BugReport_UI 这里是不是少了一个括号

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 arcgis中更新地理配准后几个图层分离怎么解决?
  • ¥15 想请教大家关于机器学习的问题
  • ¥15 虚幻UE保存Actor位置失败
  • ¥15 多个.nii合并为.nii.gz格式
  • ¥50 现在需要统计2023年全年 “签收时间(qssj)” 到 “提交时间(tjsj)” 小于半小时的业务量,但是要排除掉周末的时间,同时还要排除中午休息的时间。
  • ¥50 opencv模板匹配为何图像差别大仍然匹配数值高?
  • ¥15 如何成功完成主菜单和分菜单的代码编程C++
  • ¥15 怎样采集或者其它途径拿到全国最新个体工商户数据
  • ¥20 我是一名大学生,想学习java是自学还是报培训班呢
  • ¥15 pycharm该如何爬取网易云歌曲下的评论?