我有一个QTableView我想QPushButton为每一行设置一个.我这样做我从派生类中的如下QWidget下面发现了一个例子在这里:
for index in range(number_rows):
btn_sell = QPushButton("Edit", self)
btn_sell.clicked.connect(self.button_edit)
table_view.setIndexWidget(table_view.model().index(index, 4), btn_sell)
Run Code Online (Sandbox Code Playgroud)
如果绘制了表格并且我点击其中一个QPushButton方法self.button_edit被调用 - 但是哪一个?似乎没有给出任何类型的"事件" self.button_edit,那么如何才能找到QPushButton在button_edit方法中单击的行索引?
也许有一种不同的方式来为一个表的每一行添加一个按钮?
您的事件处理程序将类似于:
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())
Run Code Online (Sandbox Code Playgroud)
这使用该indexAt函数来获取按钮的位置.
为清楚起见,我的脚本如下所示:
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 = ['row1','row2','row3','row4']
data2 = ['1','2.0','3.00000001','3.9999999']
self.table.setRowCount(4)
for index in range(4):
item1 = QtGui.QTableWidgetItem(data1[index])
self.table.setItem(index,0,item1)
item2 = QtGui.QTableWidgetItem(data2[index])
self.table.setItem(index,1,item2)
self.btn_sell = QtGui.QPushButton('Edit')
self.btn_sell.clicked.connect(self.handleButtonClicked)
self.table.setCellWidget(index,2,self.btn_sell)
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())
Run Code Online (Sandbox Code Playgroud)
这会产生一个像这样的小GUI:

当Edit被点击的按钮,它打印到控制台:
(0, 2)
(1, 2)
(2, 2)
(3, 2)
Run Code Online (Sandbox Code Playgroud)
第一个元素是你的行索引,第二个是你的列(记住它是基于0的,这就是为什么它显示2,而不是3 - 尽管列标题).
| 归档时间: |
|
| 查看次数: |
6537 次 |
| 最近记录: |