小飞友 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日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?