我正在为客户开发一个系统,该系统显示在一组选项卡中,并在Centralwidget中显示一个表格,其中包含从数据库中提取的数据。

根据鼠标事件的不同,必须将容器(groupBox)从Centralwidget中删除,然后为该表添加新的更新数据。

这是一段运行良好的代码,并在GroupBox中显示了带有数据的表:

    self.tab_tableview = QtGui.QWidget()
    self.tab_tableview.setObjectName("tab_tableview")

    self.viewGroupBox = QtGui.QGroupBox(self.tab_tableview)
    self.viewGroupBox.setGeometry(QtCore.QRect(10, 0, 751, 501))
    self.viewGroupBox.setObjectName("viewGroupBox")

    self.vBox = QtGui.QVBoxLayout()
    self.vBox.addWidget(self.newGroupBox)
    self.vBox.setGeometry(QtCore.QRect(40, 170, 171, 111))
    self.vBox.addStretch(1)

    self.viewTableWidget = QtGui.QTableView(self.viewGroupBox)
    self.viewTableWidget.setGeometry(QtCore.QRect(10, 20, 731, 471))
    self.viewTableWidget.setObjectName("viewTableWidget")

    updatedTableModel=self.callShowTable()
    self.viewTableWidget.setModel(updatedTableModel)

    self.viewTableWidget.setColumnWidth(0,30)
    self.viewTableWidget.setColumnWidth(1,550)

    self.viewTabWidget.addTab(self.tab_tableview, "")

    if removeContainer_Bottun_Pressed:
        print "remove bottun was pressed"
        self.vBox.removeWidget(self.viewGroupBox)

    if addContainer_Bottun_Pressed:
        print "add bottun was pressed"
        self.vBox.addWidget(self.viewGroupBox)


该程序将检测“ removeContainer_Bottun_Pressed”何时为真,然后运行removeWidget(self.newGroupBox)。尽管removeWidget运行,但groupBox保留在同一位置,而不是根据请求消失并重新出现。

这里缺少什么?

所有意见和建议均受到高度赞赏。

最佳答案

我认为没有必要调用removeWidget。尝试仅对要删除的任何内容调用widget.deleteLater。然后,当您想重新添加它时,请重新创建它,并使用layout.insertWidget将其放置在适当的位置。那样有用吗?

它在Windows XP上为我工作...

import sys

from PyQt4 import QtGui, QtCore

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget_layout = QtGui.QHBoxLayout()
widget.setLayout(widget_layout)

def add_group_box():
    group_box = widget.group_box = QtGui.QGroupBox()
    group_layout = QtGui.QVBoxLayout()
    group_box.setLayout(group_layout)

    for i in range(2):
        group_layout.addWidget(QtGui.QRadioButton(str(i)))

    widget_layout.insertWidget(0, group_box)
add_group_box()

show_button = QtGui.QPushButton("show")
hide_button = QtGui.QPushButton("hide")
def on_show():
    if not widget.group_box:
        add_group_box()
def on_hide():
    if widget.group_box:
        widget.group_box.deleteLater()
        widget.group_box = None
show_button.connect(show_button, QtCore.SIGNAL("clicked()"), on_show)
hide_button.connect(hide_button, QtCore.SIGNAL("clicked()"), on_hide)
widget_layout.addWidget(show_button)
widget_layout.addWidget(hide_button)

widget.show()

app.exec_()

关于python - PyQt:removeChild/addChild QGroupBox,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1781173/

10-12 16:59