【问题标题】:PyQT4: Adding combobox in QtableviewPyQT4:在 Qtableview 中添加组合框
【发布时间】:2015-08-08 02:11:16
【问题描述】:

我是 PyQT 的新手。

我有兴趣为 tableView 的每一行添加一个组合框。 PyQT 4 有可能吗?

我知道,在 QT5 中可以,但不确定 PyQT。

提前感谢您的帮助。

【问题讨论】:

    标签: combobox pyqt qt4 tableview


    【解决方案1】:

    如果你真的想使用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)
    

    结果与第一个答案相似。

    【讨论】:

      【解决方案2】:

      这需要使用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)
      

      此块设置组合框,每行,然后将其添加到单元格(本例中的最后一个)。

      上面的代码块产生这样的输出:

      【讨论】:

      • 我需要使用QtableView。
      • 请问为什么? QTableWidget 继承自 QTableView。视图可以做的所有事情,小部件都可以做。它可以做得更多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2018-03-16
      • 2017-05-08
      相关资源
      最近更新 更多