相关疑难解决方法(0)

清除pyqt中布局中的所有小部件

有没有办法清除(删除)布局中的所有小部件?

self.plot_layout = QtGui.QGridLayout()
self.plot_layout.setGeometry(QtCore.QRect(200,200,200,200))
self.root_layout.addLayout(self.plot_layout)
self.plot_layout.addWidget(MyWidget())
Run Code Online (Sandbox Code Playgroud)

现在我想plot_layout用新的小部件替换小部件.是否有一种简单的方法可以清除所有小部件plot_layout?我没有看到任何这样的方法.

python qt pyqt pyqt4

38
推荐指数
6
解决办法
5万
查看次数

用另一个布局替换QWidget上的布局

我有一个小部件,当切换选项时,它会发生变化.这会使所有布局和小部件无效.我保留所有布局的列表,所以我可以使用类似于这个答案的东西删除它们:

class MyWidget(QFrame):
   # ...
   def reLayout(self):
      def deleteLayoutChilds(l):
         while l.count():
            item=l.takeAt(0)
            widget=item.widget()
            if widget: widget.deleteLater()
            else: deleteLayoutChilds(item.layout())
      for l in self.allLayouts: deleteLayoutChilds(l)

      # now install the new layout
      ##
      ## how to delete the old layout first?
      l=self.layout(); del l # no effect
      #
      layout=QGridLayout(self)
      ## warning: QLayout: Attempting to add QLayout "" to MyWidget "", which already has a layout.
Run Code Online (Sandbox Code Playgroud)

如何摆脱旧布局并设置新布局?


文档非常简洁,显然不能直接应用于python:

QWidget.setLayout(self,QLayout)

QLayout论证将其所有权转移到Qt.

将此窗口小部件的布局管理器设置为布局.

如果此窗口小部件上已安装布局管理器,则QWidget将不允许您安装另一个布局管理器.您必须先删除现有布局管理器(由layout()返回),然后才能使用新布局调用setLayout().

如果layout是不同小部件上的布局管理器,则setLayout()将重新布局布局并使其成为此小部件的布局管理器.

例:

 QVBoxLayout *layout = new QVBoxLayout;
 layout->addWidget(formWidget); …
Run Code Online (Sandbox Code Playgroud)

python layout qt4 pyqt4

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

pyqt4 ×2

python ×2

layout ×1

pyqt ×1

qt ×1

qt4 ×1