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

问题描述 投票:0回答:1
    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语句失败,但它会立即生效。我只是好奇这是否是功能的一部分或我的代码是否有任何问题。

python pyqt pyqt5 python-3.6 qthread
1个回答
0
投票

避免使用try-except,因为你看到隐藏错误,在我个人的情况下,我尽量避免使用它来解决这类问题。

我认为没有必要在using_q_thread中创建另一个示例,另一个问题是该线程是一个将被删除的局部变量,因此线程必须是该类的成员才能增加其范围。

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_())
© www.soinside.com 2019 - 2024. All rights reserved.