3

我想在我的表格小部件单元格中添加一个组合框。当我单击单元格时,将出现组合框。

它出现了,但问题是当我一个接一个地单击单元格时,它显示组合框已被删除?

import sys
from PyQt4 import QtGui, QtCore


class mainwin(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.resize(500, 700)


        self.comb = QtGui.QComboBox()
        self.comb.addItem("raton")


        self.table =QtGui.QTableWidget(self)
        self.table.setColumnCount(3)
        self.table.setRowCount(4)

        self.table.cellClicked.connect(self.addcomb)

   def addcomb(self,row,col):
        self.table.setCellWidget(row, col, self.comb)

问题是什么?

4

1 回答 1

4

一个小部件不能一次放置在两个地方。当您将其放入第二个单元格时,它会因此从第一个单元格中消失。但是第一个单元格不知道它并且仍然保留小部件的所有权。当您再次单击第一个单元格并调用setCellWidget时,它会删除其先前的对象,如文档中所述。所以你的组合框现在永远丢失了。

一旦将组合框放入表格中,就无法获得组合框的所有权。所以我认为每次要设置单元格小部件时都需要创建新的组合框。

如果您仍想在表格中保留一个组合框,您可以在创建新组合框之前删除以前的组合框:

    self.old_row = -1
    self.old_col = -1

  def addcomb(self,row,col):
    if self.old_row >= 0:
      self.table.setCellWidget(self.old_row, self.old_col, None)
    self.old_row = row
    self.old_col = col
    comb = QtGui.QComboBox()
    comb.addItem("raton")
    self.table.setCellWidget(row, col, comb)
于 2013-06-22T08:49:38.077 回答