我左边有一个QHBoxLayout
,QTreeWidget
中间有一个分隔符,右边有一个小部件.
当我点击时QTreeWidget
,我想更改右边的小部件来修改QTreeWidgetItem
我尝试使用此代码执行此操作:
def new_rendez_vous(self):
self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget)
del self.ui.editionFormWidget
self.ui.editionFormWidget = RendezVousManagerDialog(self.parent)
self.ui.editionFormWidget.show()
self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget)
self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData)
def edit(self, category, rendez_vous):
self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget)
del self.ui.editionFormWidget
self.ui.editionFormWidget = RendezVousManagerDialog(self.parent, category, rendez_vous)
self.ui.editionFormWidget.show()
self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget)
self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData)
def edit_category(self, category):
self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget)
del self.ui.editionFormWidget
self.ui.editionFormWidget = CategoryManagerDialog(self.parent, category)
self.ui.editionFormWidget.show()
self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget)
self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData)
Run Code Online (Sandbox Code Playgroud)
但它不起作用,所有小部件都相互叠加:
错误的例子http://hubscher.remy.free.fr/tally/images/2011/01/07/CaptureDescribingTheBug525.jpg.
你知道我如何删除旧的小部件,然后显示新的小部件吗?
小智 20
我和Natim有同样的问题.
QStackedWidget是预设布局的解决方案.它就像一个古老的用餐音乐盒里的东西.(自动点唱机中的X-数量的专辑,翻阅已安装的专辑).
然而,这并没有解决问题.
例如,我有代码我正在使用UI布局进行原型设计,但是我想要替换一些作为占位符的小部件,这些小部件具有在主脚本执行期间编码的适当小部件,或者是动态创建的.
我确信有一个简单的程序或警告如何正确删除/替换小部件.
我的代码在网格布局中有一个基本的textEdit小部件.我想编写此小部件的自定义版本以进行拖放,然后将其与默认textEdit交换出来.
像Natim一样,代码似乎在逻辑上是合理的,但是小部件很容易堆积在布局中,就像倾倒钱包一样.
希望能找到解决这个问题的方法并重新发布警告.
解:
瞧!发现了一些绝对可行的技巧.关闭你的小部件
# Remove, Create, Replace
self.ui.gridLayout.removeWidget(self.ui.dragDataEdit)
self.ui.dragDataEdit.close()
self.ui.dragDataEdit = myDumpBox(self.ui.centralwidget)
self.ui.gridLayout.addWidget(self.ui.dragDataEdit, 0, 0, 1, 1)
self.ui.gridLayout.update()
Run Code Online (Sandbox Code Playgroud)
我从布局中删除了小部件,然后关闭了小部件.此时我正在使用的变量是打开的,以创建我的自定义/修改小部件,然后将其重新插入到布局中
是的,处理更复杂的布局需要更优雅,但是为了替换它而破坏窗口小部件的基本需求是在.close()方法中
干杯..希望这会有所帮助.乙
S81*_*818 10
实际上,至少对于Qt5,使用 QLayout 的replaceWidget有一个更紧凑的替代 B4adle7 的解决方案:
containing_layout = placeholder.parent().layout()
containing_layout.replaceWidget(placeholder, new_widget)
Run Code Online (Sandbox Code Playgroud)