我是PyQT的新手。
我有兴趣在tableView的每一行添加一个组合框。在PyQT 4中可以吗?
我知道,有可能在QT5中,但不确定PyQT。
提前感谢您的帮助。
答案 0 :(得分:10)
如果您真的想使用QTableView
,那么它有一个名为setIndexWidget
的特殊方法,您只需要索引要放置小部件的位置。小例子。
model = QStandardItemModel (4, 4)
for row in range(4):
for column in range(4):
item = QStandardItem("row %d, column %d" % (row, column))
model.setItem(row, column, item)
self.tableView.setModel(model)
for row in range(4):
c = QComboBox()
c.addItems(['cell11','cell12','cell13','cell14','cell15',])
i = self.tableView.model().index(row,2)
self.tableView.setIndexWidget(i,c)
结果与第一个答案类似。
答案 1 :(得分:7)
这是否需要使用QTableView完成,还是可以使用QTableWidget来完成?
假设您可以使用窗口小部件与视图,您可以轻松地将组合框(或any widget)添加到单元格。
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']
combo_box_options = ["Option 1","Option 2","Option 3"]
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)
combo = QtGui.QComboBox()
for t in combo_box_options:
combo.addItem(t)
self.table.setCellWidget(index,2,combo)
这里的重要部分是:
combo_box_options = ["Option 1","Option 2","Option 3"]
这是您希望组合框保存的值列表。在此示例中,有三个选项。
for t in combo_box_options:
combo.addItem(t)
self.table.setCellWidget(index,2,combo)
此块每行设置组合框,然后将其添加到单元格(本例中为最后一个单元格)。
上面的代码块产生这样的输出: