添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
My code works very fine - except the following problem:
I am trying to get the object (better: its name) of a button clicked.
Some code examples I found don't work in my case. :roll:
I hope that someone can help me (again). Thanks in advance.

Code: Select all

from PySide import QtCore, QtGui
from PySide.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
from PySide.QtGui import (QApplication, QAbstractSpinBox, QComboBox, QDialog, QPushButton, QDialogButtonBox, QDoubleSpinBox,QLabel, QLineEdit, QSizePolicy, QWidget)
class Ui_MainWindow(object):
	def __init__(self, MainWindow):
		self.window = MainWindow
		if not MainWindow.objectName():
			MainWindow.setObjectName(u"MainWindow")
		MainWindow.resize(440, 370)
		self.centralwidget = QWidget(MainWindow)
		self.centralwidget.setObjectName(u"centralwidget")
		self.btnOK = QPushButton(self.centralwidget)
		self.btnOK.setObjectName(u"btnOK")
		self.btnOK.setGeometry(QRect(280, 330, 75, 24))
		self.btnOK.setDefault(True)
		self.btnCancel = QPushButton(self.centralwidget)
		self.btnCancel.setObjectName(u"btn_cancel")
		self.btnCancel.setGeometry(QRect(356, 330, 75, 24))
		self.btnCancel.setDefault(False)
		self.btnOK.clicked.connect(self.__btnClicked)
		self.btnCancel.clicked.connect(self.__btnClicked)
		MainWindow.setCentralWidget(self.centralwidget)
		self.retranslateUi(MainWindow)
	def retranslateUi(self, MainWindow):
		self.btnCancel.setText(QCoreApplication.translate("MainWindow", u"Cancel", None))
		self.btnOK.setText(QCoreApplication.translate("MainWindow", u"OK", None))
	# HERE IS THE PROBLEM
	def __btnClicked(self):
		# How to retrieve the sender or its name respectivly?? 
		obj = self.sender()                  # 'Ui_MainWindow' object has no attribute 'sender'
		obj1 = self.centralwidget()        # None
		obj2 = self.window()                 # TypeError: 'PySide2.QtWidgets.QMainWindow' object is not callable
		# ...
		# print(obj.name()) ???
		# print(obj.objectName()) ??
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow(MainWindow)
MainWindow.show()

Code: Select all

from PySide import QtCore, QtGui
from PySide.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
from PySide.QtGui import (QApplication, QAbstractSpinBox, QComboBox, QDialog, QPushButton, QDialogButtonBox, QDoubleSpinBox,QLabel, QLineEdit, QSizePolicy, QWidget)
class Ui_MainWindow(object):
    def __init__(self, MainWindow):
        def triggered(btn):
            self.__btnClicked(btn)
        self.window = MainWindow
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(440, 370)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.btnOK = QPushButton(self.centralwidget)
        self.btnOK.setObjectName(u"btnOK")
        self.btnOK.setGeometry(QRect(280, 330, 75, 24))
        self.btnOK.setDefault(True)
        self.btnCancel = QPushButton(self.centralwidget)
        self.btnCancel.setObjectName(u"btn_cancel")
        self.btnCancel.setGeometry(QRect(356, 330, 75, 24))
        self.btnCancel.setDefault(False)
        self.btnOK.clicked.connect(lambda:triggered(self.btnOK))
        self.btnCancel.clicked.connect(lambda:triggered(self.btnCancel))
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
    def retranslateUi(self, MainWindow):
        self.btnCancel.setText(QCoreApplication.translate("MainWindow", u"Cancel", None))
        self.btnOK.setText(QCoreApplication.translate("MainWindow", u"OK", None))
    # HERE IS THE PROBLEM
    def __btnClicked(self, btn):
        # How to retrieve the sender or its name respectivly?? 
        print(f"btn = {btn}")
#        obj = self.sender()                  # 'Ui_MainWindow' object has no attribute 'sender'
#        obj1 = self.centralwidget()        # None
#        obj2 = self.window()                 # TypeError: 'PySide2.QtWidgets.QMainWindow' object is not callable
        # ...
        # print(obj.name()) ???
        # print(obj.objectName()) ??
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow(MainWindow)
MainWindow.show()
Alternatively, have a separate method to handle each button click.
@TheMarkster
This is exactly what I was looking for - thank you so much.
For the sake of completeness the whole solution:

Code: Select all

	def __btnClicked(self, btn):
		print(f"btn = {btn}")	# <PySide2.QtWidgets.QPushButton(0x1496e0715c0, name="btn_cancel") at 0x000001490E55A940>
		print(btn.objectName())	# btn_cancel