执行线程时,try语句第一次执行失败

When executing thread, the first execution fails in try statement

    from PyQt5.QtWidgets import QMainWindow, QApplication,QLineEdit, QPushButton, QWidget, QAction, QTabWidget,QVBoxLayout
from PyQt5.QtCore import (QCoreApplication, QObject, QRunnable, QThread,
                          QThreadPool, pyqtSignal)
import sys
import os
from shutil import copy2
import _thread
import time


class AThread(QThread):

    def run(self):
        count = 0
        while count < 5:
            time.sleep(1)
            print("A Increasing")
            count += 1

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.setAcceptDrops(True)
        self.setWindowTitle('Learn')
        self.setGeometry(300, 300, 300, 150)
        self.layout = QVBoxLayout(self)

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tab1 = QWidget()   
        self.tab2 = QWidget()
        self.tabs.resize(300,200) 

        # Add tabs
        self.tabs.addTab(self.tab1,"Tab 1")
        self.tabs.addTab(self.tab2,"Tab 2")

        # Create first tab
        self.tab1.layout = QVBoxLayout(self)
        self.pushButton1 = QPushButton("PyQt5 button")
        self.pushButton1.clicked.connect(self.ON_PRESS)
        self.textbox = QLineEdit(self)
        self.tab1.layout.addWidget(self.textbox )
        self.tab1.layout.addWidget(self.pushButton1)
        self.tab1.setLayout(self.tab1.layout)
        #Create Textbox inputs


        # Add tabs to widget        
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)

    def using_q_thread(self):
        app = Example()
        thread = AThread()
        thread.start()
        sys.exit(app.exec_())

    def ON_PRESS(self):
###Here is the Issue
        try:
            self.using_q_thread()    
        except:
            print ("Error: unable to start thread")
###Drag and Drop files to directory
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()

希望我问的是正确的,但是每当使用 QThread 时,似乎都会出现问题。第一次尝试访问线程函数会导致 try 语句失败,但随后它会立即起作用。我只是好奇这是否是功能的一部分,或者我的代码是否有任何问题。

避免使用 try-except,因为您看到隐藏了错误,就我个人而言,我会尽可能避免使用它来解决此类问题。

我认为没有必要在using_q_thread中创建另一个Example,另一个问题是线程是一个将被淘汰的局部变量,所以thread必须是class的成员它的范围增加。

import sys
import time
from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTabWidget, QPushButton, QLineEdit


class AThread(QThread):
    def run(self):
        count = 0
        while count < 5:
            time.sleep(1)
            print("A Increasing")
            count += 1

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.setAcceptDrops(True)
        self.setWindowTitle('Learn')
        self.setGeometry(300, 300, 300, 150)
        self.layout = QVBoxLayout(self)

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tab1 = QWidget()   
        self.tab2 = QWidget()
        self.tabs.resize(300,200) 

        # Add tabs
        self.tabs.addTab(self.tab1,"Tab 1")
        self.tabs.addTab(self.tab2,"Tab 2")

        # Create first tab
        self.tab1.layout = QVBoxLayout()
        self.pushButton1 = QPushButton("PyQt5 button")
        self.pushButton1.clicked.connect(self.ON_PRESS)
        self.textbox = QLineEdit(self)
        self.tab1.layout.addWidget(self.textbox )
        self.tab1.layout.addWidget(self.pushButton1)
        self.tab1.setLayout(self.tab1.layout)
        #Create Textbox inputs


        # Add tabs to widget        
        self.layout.addWidget(self.tabs)

    def using_q_thread(self):
        self.thread = AThread()
        self.thread.start()


    def ON_PRESS(self):
        self.using_q_thread()    

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())