@eellazy

Как передать сигнал со стороннего модуля?

Всем привет. Есть программа которая сбитая в один файл. Теперь хочу это всё дело раскидать по модулям.
Как мне принять сигнал в pyqt с другого модуля?

Сейчас я передаю сигнал так:
self.parserBazos.newTextSignalBazos.connect(self.addNewItemBazos)


Главный файл
config_dir = 'modules/sk_sk/bazos/config/config.ini'
open_file_number_dir = 'modules/sk_sk/bazos/database/database_number.txt'
open_file_csv_dir = 'modules/sk_sk/bazos/database/database.csv'

class ParserBazos(QtCore.QObject):
    running = False
    newTextSignalBazos = QtCore.pyqtSignal(str)
    def run(self):     
        bazos.main(config_dir, open_file_number_dir, open_file_csv_dir)

class MyWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.parserButton_1.clicked.connect(self.threadBazos)  

    def threadBazos(self):
        self.thread_1 = QtCore.QThread()
        self.parserBazos = ParserBazos()
        self.parserBazos.moveToThread(self.thread_1)
        self.parserBazos.newTextSignalBazos.connect(self.addNewItemBazos)
        self.thread_1.started.connect(self.parserBazos.run)
        self.thread_1.start()

    @QtCore.pyqtSlot(str)
    def addNewItemBazos(self, string):
        self.ui.parserList_1.addItem(string)


И вот другой файл с которого вместо print нужно посылать сигнал и выводить в окне программы
def print_item(data):
    data_item = data['phone'], data['country_code'], data['name'], data['title'], data['location'], data['link_page'], data['login'], data['link_login']
print(data_item)
    return data_item
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
@bbkmzzzz
ParserBazos в отдельный файл, импортируете его, дальше все тоже самое
#####
from <file_with_ParserBazos> import ParserBazos 
#####
config_dir = 'modules/sk_sk/bazos/config/config.ini'
open_file_number_dir = 'modules/sk_sk/bazos/database/database_number.txt'
open_file_csv_dir = 'modules/sk_sk/bazos/database/database.csv'

class MyWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.parserButton_1.clicked.connect(self.threadBazos)  

    def threadBazos(self):
        self.thread_1 = QtCore.QThread()
        self.parserBazos = ParserBazos()
        self.parserBazos.moveToThread(self.thread_1)
        self.parserBazos.newTextSignalBazos.connect(self.addNewItemBazos)
        self.thread_1.started.connect(self.parserBazos.run)
        self.thread_1.start()

    @QtCore.pyqtSlot(str)
    def addNewItemBazos(self, string):
        self.ui.parserList_1.addItem(string)


P.S. Возьмите за привычку все переменные уровня класса определять в __init__
def __init__(self, parent=None):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.parserBazos = ParserBazos() # <-
        self.thread_1 = QtCore.QThread() # <-

        self.ui.parserButton_1.clicked.connect(self.threadBazos)

а в threadBazos(self): создание экземпляра ParserBazos и QtCore.QThread удалить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы