Две кнопки вызывают одну функцию с разным результатом

Как сделать такое:

  • два виджета, например кнопки, дёргают одну функцию-слот с разным результатом.

Минимально воспроизводимый пример:

import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *


def show_message():
    print("button1")
    #print("button2")


def main():
    app = QApplication(sys.argv)
    window = QWidget()
    window.setGeometry(100, 100, 400, 200)  
    vbox = QVBoxLayout()
    button1 = QPushButton("button1", window)
    button1.clicked.connect(show_message)
    button2 = QPushButton("button2", window)
    button2.clicked.connect(show_message)
    vbox.addWidget(button1)
    vbox.addWidget(button2)
    window.setLayout(vbox)
    window.show()
    sys.exit(app.exec())

if __name__ == "__main__":
    main()

Ответы (2 шт):

Автор решения: S. Nick

Как вариант:

PySide6.QtCore.QObject.sender()

Возвращает указатель на объект, отправивший сигнал, если он вызван в слоте, активированном сигналом; в противном случае возвращается None.
Указатель действителен только во время выполнения слота, который вызывает эту функцию из контекста потока этого объекта.

import sys
'''
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
'''
from PyQt5.Qt import *
from PyQt5 import QtWidgets, QtCore, QtGui
   
    
class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.button1 = QPushButton("button1")
        self.button1.clicked.connect(self.show_message)
        self.button2 = QPushButton("button2")
        self.button2.clicked.connect(self.show_message)

        vbox = QVBoxLayout(self)
        vbox.addWidget(self.button1)
        vbox.addWidget(self.button2)

    def show_message(self):
        sender = self.sender()
        print(f'{sender.text()}')
 

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.setGeometry(100, 100, 400, 200) 
    window.show()
    sys.exit(app.exec())

введите сюда описание изображения

→ Ссылка
Автор решения: Garp

Вот такое было нужно

import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        spinbox1 = QSpinBox()
        spinbox1.setObjectName('spinbox1')
        spinbox1.valueChanged.connect(self.show_message)
        spinbox2 = QSpinBox()
        spinbox2.setObjectName('spinbox2')
        spinbox2.valueChanged.connect(self.show_message)
        vbox = QVBoxLayout(self)
        vbox.addWidget(spinbox1)
        vbox.addWidget(spinbox2)

    def show_message(self, value):
        sender = self.sender()
        print(value, sender.objectName())
 

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())
→ Ссылка