Как передать переменную из 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()
  • Вопрос задан
  • 681 просмотр
Решения вопроса 1
@bbkmzzzz
Забудьте про global
Подписать главный виджет на сигнал cellClicked при создании другого виджета, потом отписывать. (или создать кастомный сигнал и подписываться на на него)
Вызвать метод главного окна из виджета напрямую.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы