QThread не может быть вызван в PyQt - PullRequest
0 голосов
/ 28 апреля 2018

Я реализовал подкласс о QThread, но запуск не может быть вызван:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *


class MyThread(QThread):
    def __init__(self):
        super(MyThread,self).__init__()

    def run(self):
        for i in range(1000):
            print(i)
if __name__ == '__main__':
    import sys
    class MainWindow(QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            self.resize(500,500)
            self.label = QLabel()
            self.setCentralWidget(self.label)
            layout = QHBoxLayout()
            self.label.setLayout(layout)
            btn = QPushButton('start')
            layout.addWidget(btn)
            btn.clicked.connect(self.BTNClick)
        def BTNClick(self):
            thread = MyThread()
            thread.start()

    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

Когда я отлаживаю код, я нахожу, что MyThread обычно запускается. Но когда я запускаю код напрямую, функция run не вызывается.

1 Ответ

0 голосов
/ 28 апреля 2018

Локальная переменная удаляется, когда вы завершаете выполнение функции, в вашем случае потоком является локальная переменная BTNClick, поэтому при запуске она исключается, если вы хотите, чтобы поток сохранялся даже после выполнения BTNClick, вы должен сделать это атрибутом, используя self:

def BTNClick(self):
    self.thread = MyThread()
    self.thread.start()
...