2012-02-20 5 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 정말 멋지 네요. –

관련 문제