Saata
@Saata
Неумёха.

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

Я решил отделить функции логики в отдельный класс(Action), но мне не удается получить отправителя сигнала через sender(). Сейчас он работает корректно только при открытии нового окна(Second), но я бы хотел что бы при вызове функции из Action она получала отправителя сигнала.
Как в этом куске:
class Action():
           
    def pushBtn(self):
        sender = self.sender()
        print(sender.text()) 
        dlg = SecondDialog()
        dlg.exec()

Если функция в классе MainWindow, то все работает нормально.
как это сделать и как првильно отделить логику в другой класс?

Здесь упрощенный пример:
import sys
from PyQt6.QtGui import QClipboard
from PyQt6.QtWidgets import (QWidget, QApplication, QPushButton,
                             QHBoxLayout, QVBoxLayout, QDialog)

class MainWindow(QWidget):
    
    def __init__(self, parent=None):
        super().__init__()
        self.setGeometry(150, 300, 300, 150)
        self.setWindowTitle('MAIN')
        self.initUI()
        self.act_widgets()
        self.show()
        
    def initUI(self):
        self.vbMain = QVBoxLayout()
        self.btn = QPushButton('MAIN')
        self.btn1 = QPushButton('MAIN1')
        self.vbMain.addWidget(self.btn)
        self.vbMain.addWidget(self.btn1)
        self.setLayout(self.vbMain)
        
    def act_widgets(self):
        self.btn.clicked.connect(Action.pushBtn)
        self.btn1.clicked.connect(Action.pushBtn)
    
class SecondDialog(QDialog):
    
    def __init__(self):
        super().__init__()
        self.setWindowTitle('SECOND')
        self.setGeometry(150, 300, 150, 150)
        self.initUIDialog()
        self.act_widgets_dialog()
        self.show()
        sender = self.sender()
        print(sender.text())        
        
    def initUIDialog(self):
        self.vbSec = QVBoxLayout()
        self.btnSec = QPushButton('SEC')
        self.vbSec.addWidget(self.btnSec)
        self.setLayout(self.vbSec)
    
    def act_widgets_dialog(self):
        self.btnSec.clicked.connect(Action.pushSecBtn)

class Action():
           
    def pushBtn(self):
        dlg = SecondDialog()
        dlg.exec()
        
    def pushSecBtn():
        pass

app = QApplication(sys.argv)
MainWnd = MainWindow()
sys.exit(app.exec())
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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