Я решил отделить функции логики в отдельный класс(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())