代码之家  ›  专栏  ›  技术社区  ›  Michael Westwort

网格布局:列宽以适应禁用的小部件

  •  1
  • Michael Westwort  · 技术社区  · 8 年前

    • QScrollArea公司
    • 带网格布局的滚动区域内容

    只要布局中的小部件处于启用状态,列的宽度就与小部件确定的宽度相同。但是,我在启动时禁用了所有小部件。然后,列收缩并裁剪小部件。如何强制布局也尊重禁用的小部件?(或者有没有一种方法可以在不禁用小部件的情况下阻止使用它们?)

    for widget in self.tabScrollAreaContents.children():
        widget.setEnabled(False)
    

    这里没有更多代码,只有两个图像:

    correct layout with enabled widgets

    具有禁用小部件的收缩列:

    shrinked columns with disabled widgets

    补充:

    https://www.dropbox.com/sh/i19geisqw6nxuky/AADIPHL1xVKzLCJdoLEsTFDna?dl=0

    看起来像这样(左是错的,右是好的):

    screenshot

    for widget in self.TabScrollAreaContentsA.children():
        widget.setEnabled(False)
    
    1 回复  |  直到 5 年前
        1
  •  3
  •   eyllanesc    8 年前

    for widget in self.TabScrollAreaContentsA.children():
        print(widget)
    

    输出:

    <PyQt4.QtGui.QGridLayout object at 0x7f9a19fc3f78>
    <PyQt4.QtGui.QPushButton object at 0x7f9a1a0c7048>
    <PyQt4.QtGui.QLineEdit object at 0x7f9a1a0c70d8>
    <PyQt4.QtGui.QLabel object at 0x7f9a1a0c71f8>
    <PyQt4.QtGui.QLineEdit object at 0x7f9a1a0c73a8>
    <PyQt4.QtGui.QLabel object at 0x7f9a1a0c7438>
    <PyQt4.QtGui.QLineEdit object at 0x7f9a1a0c74c8>
    <PyQt4.QtGui.QLabel object at 0x7f9a1a0c7558>
    <PyQt4.QtGui.QPushButton object at 0x7f9a1a0c75e8>
    <PyQt4.QtGui.QLineEdit object at 0x7f9a1a0c7678>
    

    据观察,它显示为一个布局,并根据 docs :

    如果enable为true,则启用此布局,否则将禁用它。

    启用的布局根据变化动态调整;禁用的布局 就好像它不存在一样。

    默认情况下,启用所有布局。

    也就是说,如果禁用某些布局,则它将与不存在的布局相同。

    for obj in self.TabScrollAreaContentsA.children():
        if isinstance(obj, QtGui.QWidget):
            obj.setEnabled(False)