2017-09-20 6 views
0

Qt Creatorのウィジェットにグリッドレイアウトを追加しました。階層は、次のとおりグリッドレイアウト:無効なウィジェットに合わせる列幅

  • QScrollArea
  • 3つの列と複数の行

  • いくつかのウィジェットは限りレイアウトのウィジェットが有効になっているように、列が通りであるグリッドレイアウトと
  • ScrollAreaContentsウィジェットによって決定されるように広い。しかし、起動時にすべてのウィジェットを無効にします。次に、列がウィジェットを縮小してトリミングします。無効なウィジェットを尊重するようにレイアウトを強制するにはどうすればいいですか? (または、ウィジェットを無効にしないで使用することを防ぐ方法がありますか?)

    この問題は、ウィジェットを無効にすることによって明らかに引き起こされます。重要な行は、単純ではない:

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

    んが、ここでは、コードが、2枚の画像:有効ウィジェットと

    正しいレイアウト:

    correct layout with enabled widgets

    は無効ウィジェットの列を縮め:

    shrinked columns with disabled widgets

    補足:ダウンロードする

    最小限のコード:左と右の間の唯一の違いは、これらのある

    screenshot

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

    は、この(左、右大丈夫です、間違っている)ように見えます行:

    for widget in self.TabScrollAreaContentsA.children(): 
        widget.setEnabled(False) 
    
  • +0

    私はあなたが表示さ何かテストしていると私はあなたのエラーを再現することができませんでした:それは、次のコードを使用しているため

    そして、この動作の原因、正しい事は、ウィジェットを無効にするだけです、私が得るものは次のとおりです:https://imgur.com/a/UpnWr。 github、drive、dropboxなどでプロジェクトを共有できますが、私があなたが記述したものを正しく再現していない可能性があります。 – eyllanesc

    +0

    @eyllanescあなたのプロジェクト全体を共有するのではなく、(同じ問題を抱える)他の人たちが[mcve]を提供する方が便利です。 – m7913d

    +0

    ラベルの水平サイズポリシーを固定に設定しますか? –

    答えて

    1

    誰が次を取得し、次のコードを使用してTabScrollAreaContentsAの子供:

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

    出力:docsには、レイアウト子として表示されていることを観察して応じている

    <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> 
    

    QLayout.setEnabled(self、bool)

    enableがtrueの場合はこのレイアウトを有効にし、そうでない場合は無効にします。

    有効なレイアウトでは、変更を動的に調整します。無効なレイアウト は、存在しないかのように動作します。

    デフォルトでは、すべてのレイアウトが有効です。

    isEnabled()も参照してください。

    つまり、一部のレイアウトを無効にすると、存在しない場合と同じレイアウトになります。

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

    非常に良い。私は 'is not isinstance(widget、QtGui.QLayout)'を使用します。 –

    +0

    この文では問題が発生する可能性があります。 'childrens()'はすべての子 'QObject'を返します。すべての' QObject'に 'setDisabled()'メソッドがないので、プログラムがクラッシュする可能性があります。この場合、どちらも偶然、型ごとに異なる 'setDisabled()'メソッドがあります – eyllanesc

    関連する問題