【问题标题】:How to find out to which QTableWidget a QPushbutton belongs to?如何找出 QPushbutton 属于哪个 QTableWidget?
【发布时间】:2014-08-07 01:46:56
【问题描述】:

我有两个QTableWidgetItems。每个都有多个QPushButtons 设置为其中的单元格小部件。

目前,对于一个QTableWidget,我正在使用self.sender() 找出正在按下的按钮的行和列:

button = self.sender()
index = self.Table.indexAt(button.pos())
currentRow = index.row()
mydata = str(self.Table.item(currentRow, 2).text())

但是,我想将两个表的QpushButtons 连接到同一个函数。所以,如果我有表 A 和表 B 都有 QPushButtons 连接到相同的功能。

然后我如何知道一个按钮在被点击时是属于表 A 还是表 B?

【问题讨论】:

    标签: python qt pyqt pyqt4 qtablewidget


    【解决方案1】:

    正如 Matyas Kuti 所说,您可以使用 parent。我为它做了一个例子。

    from PySide import QtGui
    
    class MyTableWidget(QtGui.QTableWidget):
    
        def __init__(self):
            super().__init__(None)
            button = QtGui.QPushButton('Click me', self)
            button.clicked.connect(self.buttonClicked)
            self.setCellWidget(2, 1, button)
    
        def buttonClicked(self):
            button = self.sender()
            print(button.parent() is self)
    
    
    app = QtGui.QApplication([])
    table = MyTableWidget()
    table.show()
    app.exec_()
    

    单击按钮时输出为True。示例在 Python 3.X 和 PySide 中,但也应适用于所有 Python 和 PyQt。


    编辑:如果您没有直接从QTableWidget 继承,但QTableWidget 和按钮都是另一个对象的子对象,只需将表的引用存储在已知名称下的公共父对象中(例如“表") 然后像这样访问:

     button.parent().table
    

    【讨论】:

    • 我不是从 QTableWidget 继承的。相反,QTableWidgetQPushButton 都是在继承自 QDialog 的类中创建的。感谢您的帮助
    • @Chris 但是您可以使用已知名称将表存储在父级中,并且只需稍微调整代码。查看编辑。
    【解决方案2】:

    如果按钮和表格小部件之间的父子关系设置正确(很可能是这样),您可以使用 QPushButton 的 parent() 方法访问 QTableWidgetItem 并在项目上使用相同的函数来访问 QTableWidget .

    【讨论】:

    • 我尝试过self.sender().parent() == QTableWidget,但结果显示为False,尽管我点击了同一个QTableWidget中的按钮
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多