【问题标题】:Python PyQt4 QTableWidget CellWidget Roll Column valuesPython PyQt4 QTableWidget CellWidget 滚动列值
【发布时间】:2014-05-13 03:57:20
【问题描述】:

我有一个 QTablWidget 具有以下属性:

        mytable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers)
        mytable.setSelectionBehavior(QtGui.QTableWidget.SelectRows)
        mytable.setSelectionMode(QtGui.QTableWidget.SingleSelection)
        mytable.horizontalHeader().setStretchLastSection(True)
        mytable.verticalHeader().hide()

在我表的每一行上,我都有一个 QPushButton 设置为 CellWidget,如下所示:

一旦用户按下任何按钮,有什么方法可以获取QPushButton 所在表的Row number

例如,如果用户点击表格的row 2上的QPushButton,则返回值2。

编辑 2

根据其中一个答案,我已将代码更新为:但我仍然没有得到任何东西。我哪里出错了?我试图打印出 self.table.itemAt(button.pos()) 的输出,我得到了 None

from PyQt4 import QtGui,QtCore
import sys

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self,parent)
        self.table = QtGui.QTableWidget()
        self.table.setColumnCount(3)
        self.setCentralWidget(self.table)
        data1 = ['orange','apple','banana','lemon']
        data2 = ['3','4','5.5','2']

        self.table.setRowCount(4)

        for i in range(4):
            item1 = QtGui.QTableWidgetItem(data1[i])
            self.table.setItem(i,0,item1)
            item2 = QtGui.QTableWidgetItem(data2[i])
            self.table.setItem(i,1,item2)
            self.button = QtGui.QPushButton('TEST')
            self.button.clicked.connect(self.handleButtonClicked)
            self.table.setCellWidget(i,2,self.button)

    def handleButtonClicked(self):
        button = self.sender()
        item = self.table.itemAt(button.pos())
        if item is not None:
            print (item.row(),item.column())


def Main():
    app = QtGui.QApplication(sys.argv)
    main = MainWindow()
    main.show()
    app.exec_()

if __name__ == '__main__':
    Main()

【问题讨论】:

    标签: python pyqt pyqt4 qtablewidget


    【解决方案1】:

    如果可以获取到被点击按钮的引用,那么QTableView.indexAt可以用来获取对应的索引:

        button.clicked.connect(self.handleButtonClicked)
        ...        
    
        def handleButtonClicked(self):
            button = QtGui.qApp.focusWidget()
            # or button = self.sender()
            index = self.table.indexAt(button.pos())
            if index.isValid():
                print(index.row(), index.column())
    

    【讨论】:

    • @ChrisAung。那是因为您没有为单元格设置表格小部件项目。我修改了我的答案以使用indexAt,它更通用,因为它只返回一个QModelIndex
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2012-03-03
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多