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

时间:2018-08-27 18:07:28

标签: python pyqt pyqt5 python-3.6 qthread

    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时,似乎都会有些打ic。第一次尝试访问线程函数会导致try语句失败,但随后立即生效。我只是好奇这是否是功能的一部分,或者我的代码是否存在任何问题。

1 个答案:

答案 0 :(得分: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_())