2012-03-07 8 views
0

動的なユーザーインターフェイスを使用してウィジェットを表示し、データベースのデータに応じて消滅させる必要があるアプリケーションを作成しています。コードは以下の通りです。ウィジェットを削除できないためUIを更新できません

データ部分は問題なく、UIの更新は行っていません。

私は、QTabWidget内でウィジェットを動的に作成します。このウィジェット(クラス)は3つのウィジェット:2つのlistWidgetsと押しボタンを含みます。 widget.updateまたはwidget.repaintの有無にかかわらずdestroy-methodの削除または呼び出しは成功していません。

私は間違っていますか?

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) 
+0

私は昨夜、この問題に遭遇しました。この場合、コンテナウィジェット 'QTabWidget'を正しく理解し、その親を' None'に設定することで解決しました。これは 'QTabWidget'を削除します。それを同じ場所に置き換えて 'QTableWidget'を再作成してください。今度は通常どおりに入力します。私はあなたがしようとしているものの正確なサンプルコードを与えると、より良い答えを与えることができます。 – Jeff

答えて

0

ジェフは、あなたがしようとすればいいのウィジェットを削除するには、右です:

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

仕事をしてくれて、ありがとう – Richard

関連する問題