Как передать переменную из Widget в MainWindow через pyqtSignal и почему он не работает?

Есть MainWindow. На нем есть кнопка Btn и label_СС. По нажатию на кнопку открывается отдельный виджет, в котором есть tableWidget и label_2. Через метод cellClicked значение в ячейке таблицы спокойно передаётся внутри виджета в label_2 (в виде переменной внутри функции).
Но не могу понять как передать это значение на label_СС так же по нажатию на ячейку через сигнал. Перепробовал различные комбинации (и передовая в сигнале переменную и то что ниже) - ничего не работает. Вопрос почему? Или сигнал между классами как-то не так работает?

Вот код (убрал всё лишнее)
import sys 

from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import pyqtSignal

class Main(QMainWindow):
    def __init__(self):        
        super().__init__()
        uic.loadUi("CancerRiskAssesment_main.ui", self)
    
        self.B_CC.clicked.connect(self.show_cancer_ch)
        self.dialog22 = Cancerogen_choicewindow()
        self.dialog22.mySignal.connect(self.changelabel)

    def show_cancer_ch(self):
        self.dialog = Cancerogen_choicewindow()
        self.dialog.show()

    def changelabel(self):
        self.label_CC.setText(self.dialog22.SF_transmit)


class Cancerogen_choicewindow(QWidget):
    SF_transmit = None

    mySignal = pyqtSignal()

    def __init__(self, parent=None):      
        super().__init__(parent)
        uic.loadUi("Cancerogen_choice.ui", self)
        
        self.tableWidget.cellClicked.connect(self.cellclick)
        self.pushButton11.clicked.connect(self.send_data)
    
    def cellclick(self, row, column):
        item = self.tableWidget.item(row, column)
        self.SF = item.text()
        self.label_2.setText(self.SF)
    def send_data(self):
        self.SF_transmit = self.SF
        self.mySignal.emit()
        self.close()

def main():
    app = QApplication(sys.argv)  
    window = Main()  
    window.show()  
    app.exec_()  

if __name__ == '__main__':  
    main()
  • Вопрос задан
  • 644 просмотра
Решения вопроса 1
@bbkmzzzz
Забудьте про global
Подписать главный виджет на сигнал cellClicked при создании другого виджета, потом отписывать. (или создать кастомный сигнал и подписываться на на него)
Вызвать метод главного окна из виджета напрямую.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект