Ошибка при работе с потоками в PyQt. Что делать?
Когда я запускаю этот код у меня вылетает ошибка:
TypeError: MainWindow.a() missing 1 required positional argument: 'self'
self._target(*self._args, **self._kwargs)TypeError: MainWindow.b() missing 1 required positional argument: 'self'
вот код:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("NCM manager")
self.setGeometry(100, 100, 320, 210)
self.setWindowIcon(QIcon('si.png'))
self.setStyleSheet("background-color: rgb(42, 42, 40);")
def a(self):
reg = MainWindow(self)
time.sleep(2)
reg.setWindowTitle("NdfvergfvCM")
def b(self):
time.sleep(5)
reg = MainWindow(self)
time.sleep(2)
reg.setWindowTitle("MBIM")
t1 = Thread(target=a)
t2 = Thread(target=b)
t1.start()
t2.start()
t1.join()
t2.join()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Вам не нужны никакае дополнительные библиотеки.
Один из самых распространенных вариантов работы с потоками, выглядит так:
import sys
#import time
#from threading import Thread
from random import choice
from PyQt5.Qt import *
class FirstThread(QThread):
message = pyqtSignal(str)
def __init__(self):
super().__init__()
self.window_title_names = [
'Какоето название окна',
'Другое название окна.']
def run(self):
while True:
self.message.emit(choice(self.window_title_names))
self.msleep(2000)
class SecondThread(QThread):
message = pyqtSignal(str)
def __init__(self):
super().__init__()
self.number = 0
def run(self):
while True:
self.number += 1
self.message.emit(f'Button {self.number}')
self.msleep(2000)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("NCM manager")
self.setWindowIcon(QIcon('im.png'))
self.setStyleSheet("background-color: rgb(42, 42, 40);")
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.pushButton = QPushButton('Button')
self.pushButton.setStyleSheet("background-color: rgb(142, 142, 140);")
layout = QVBoxLayout(self.centralWidget)
layout.addWidget(self.pushButton)
self.t1 = FirstThread()
self.t1.message.connect(self.a)
self.t1.start()
self.t2 = SecondThread()
self.t2.message.connect(self.b)
self.t2.start()
def a(self, name):
self.setWindowTitle(name)
def b(self, name):
self.pushButton.setText(name)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.resize(600, 300)
w.show()
sys.exit(app.exec_())
