我正在为客户开发一个系统,该系统显示在一组选项卡中,并在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/