Две кнопки вызывают одну функцию с разным результатом
Как сделать такое:
- два виджета, например кнопки, дёргают одну функцию-слот с разным результатом.
Минимально воспроизводимый пример:
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())
