Невозможно обновить пользовательский интерфейс, потому что не может удалить виджеты - PullRequest
0 голосов
/ 07 марта 2012

Я создаю приложение с динамическим пользовательским интерфейсом, означающим, что виджеты должны появляться и исчезать в зависимости от данных в базе данных.Код приведен ниже.

С частью данных все в порядке, обновление интерфейса отсутствует.

Я динамически создаю виджет в QTabWidget.Этот виджет (будучи классом) содержит 3 виджета: 2 listWidgets и кнопку.Удаление или вызов метода destroy с или без widget.update или widget.repaint не удаются.

Что я делаю не так?

class ImEntityWidget(object):
    def __init__(self, widgetParent, entityclass, x, y, width, height):
        self.widgetParent = widgetParent
        self.entityclass = entityclass

        self.x = x
        self.y = y
        self.height = height
        self.width = width
        self.focusItem = session.query(Entity).filter(
                         Entity.parent_vpu_id == VpuFocus.Id).filter(
                         Entity.Class == self.entityclass).first()

        self.listWidgetHigher = QListWidget(self.widgetParent)
        self.listWidgetHigher.setGeometry(QtCore.QRect(
                                          self.x, self.y, self.width, 25))
        font = QtGui.QFont()
        font.setPointSize(8)
        self.listWidgetHigher.setFont(font)
        self.listWidgetHigher.setObjectName("listWidgetHigher" +
                                            str(self.entityclass.name))

        # Entity in focus pushbutton widget
        self.listWidget_pb = QtGui.QPushButton(self.widgetParent)
        self.listWidget_pb.setGeometry(QtCore.QRect(
                                       self.x, self.y + 25, self.width, 25))
        font = QtGui.QFont()
        font.setPointSize(7)
        font.setWeight(75)
        font.setBold(True)
        self.listWidget_pb.setFont(font)
        self.listWidget_pb.setObjectName("pushButton" + str(self.entityclass.name))

        # Lower recursion entity widget
        self.listWidget = QListWidget(self.widgetParent)
        self.listWidget.setGeometry(QtCore.QRect(
                        self.x, self.y + 50, self.width, self.height - 50))
        font = QtGui.QFont()
        font.setPointSize(8)
        self.listWidget.setFont(font)
        self.listWidget.setObjectName("listWidget" + str(self.entityclass.name))

        # set button context menu policy
        self.listWidget_pb.setContextMenuPolicy(Qt.CustomContextMenu)
        self.listWidget_pb.customContextMenuRequested.connect(
                                                    self.listWidget_pbCtxMenu)
        self.listWidget_pb.connect(self.listWidget_pb,
                SIGNAL("activated(QModelIndex)"), self.focusHigherRecursion)
        self.listWidget.itemDoubleClicked.connect(self.doubleClick)


#Using the widget class
self.entWidget = ImEntityWidget(
              self.tabPrimaryProcesses, entityclass,
              wX, wY, wWidth, wHeight)
self.entityWidgets.append(self.entWidget)



# Trying to delete the widgets
for self.widget in self.entityWidgets:
    #del self.widget.listWidgetHigher
    #del self.widget.listWidget_pb
    #del self.widget.listWidget
    #self.tabPrimaryProcesses.update()
    self.widget.listWidgetHigher.destroy(destroyWindow=True)
    self.widget.listWidget_pb.destroy(destroyWindow=True)
    self.widget.listWidget.destroy(destroyWindow=True)

1 Ответ

0 голосов
/ 16 марта 2012

Джефф прав, чтобы удалить виджет, попробуйте:

self.widget.listWidgetHigher.setParent(None)
self.widget.listWidget_pb.setParent(None)
self.widget.listWidget.setParent(None)
...