【问题标题】:Adding a combobox in my tablewidget在我的表格小部件中添加一个组合框
【发布时间】:2013-06-22 06:02:22
【问题描述】:

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

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

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)

有什么问题?

【问题讨论】:

    标签: python qt pyqt pyqt4


    【解决方案1】:

    一个小部件不能同时放置在两个地方。当您将其放入第二个单元格时,它会因此从第一个单元格消失。但是第一个单元格不知道它并且仍然保留小部件的所有权。当您再次单击第一个单元格并调用 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)
    

    【讨论】:

    • 也拯救了我的一天。以为我需要切换到 QTableView 来完成这项任务。
    猜你喜欢
    • 1970-01-01
    • 2012-08-05
    • 2018-03-28
    • 1970-01-01
    • 2023-03-09
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多