2012-02-20 13 views
3

私は自分のアプリケーションのために、タイトルのボタン付きのグループボックスが必要です。 または同等のもの。タイトルにボタンを含むQGroupBoxを構築するには?

ここは私の用途です。

このアプリケーションは、データ構造を読み込んで、そこから適切なパネルを作成します。一部のプロパティは、このプロパティパネルを使用して追加または削除できます。

プロパティが文字列または整数のような端末の場合、プロパティは古典的なラベルと適切なウィジェットとして表されます。私はこのレイアウトに削除ボタンを簡単に追加できます。

しかし、プロパティがより複雑で、それ自身にいくつかのサブプロパティを持つ場合、それはグループボックスとして表されます。元のQGroupBoxは文字列だけをタイトルとして許可していますが、そこに削除ボタンを追加したいと思います。

QTが新しく、何か不足している可能性があります。

答えて

5

PyQtで提供されるウィジェットは、一般的な用途とニーズをカバーする基本的なビルディングブロックとコンビニエンスウィジェットです。しかし、カスタムウィジェットが必要なときは、近いものをサブクラス化して独自のカスタムウィジェットを作成することができます。

QGroupBoxを使用できます。基本的にQFrameはQLabelで構成されています。次に、クラスはこのラベルのテキストを設定できるいくつかのメソッドをラップします。この基本的なウィジェットは、次のように始まります:

group = QtGui.QGroupBox() 
group.setTitle("FOO") 

代わりにQWidgetを使用し、空白のラベルを付けたQGroupBoxを追加します。親ウィジェットの絶対位置にボタンを配置します。私たちはQFrameを使用することができましたが、QGroupBoxを使用すると、あなたが望むインスタントスタイルが得られます。

class ButtonGroupBox(QtGui.QWidget): 

    def __init__(self, parent=None): 
     super(ButtonGroupBox, self).__init__(parent=parent) 

     self.layout = QtGui.QVBoxLayout(self) 
     self.layout.setContentsMargins(0,24,0,0) 
     self.groupBox = QtGui.QGroupBox(self) 
     self.button = QtGui.QPushButton("FOO", parent=self) 
     self.layout.addWidget(self.groupBox) 

     self.button.move(0, -4) 

ボタンのテキストを変更できるメソッドを使用して、このカスタムクラスを拡張できます。上部のウィジェットの余白は、GroupBoxの上にボタンをレイアウトする余分なスペースを与えるために必要です。

3

実際にはQGroupBoxクラスでは、checkable propertyでラベルの横にチェックボックスを付けることができます。ユーザは、チェックボックスと相互作用すると

、それは以下の信号を発するであろう:

void clicked(bool checked); 
void toggled(bool on); 

対応する方法及び信号はPyQtに等しいです。

+0

+1これはすばらしく、私が探していたものです... –

関連する問題