PyQt 예제 1.5.2

지난 번에 이어서, 이번에는 체크 박스를 추가해보겠다. 체크 박스를 체크하면 레이블의 텍스트가 굵게 되도록 해볼 것이다.


-__version__ = "1.5.1"
+__version__ = "1.5.2"
 
 class Form(QDialog):
     def __init__(self, parent=None):
         super().__init__(parent)
 
         self.label = QLabel("Hello, PyQt!")
-        
-        self.lineEdit = QLineEdit("This is LineEdit Widget")
+        self.labelFormat = "{}"
 
+        self.lineEdit = QLineEdit("This is LineEdit Widget")
+        self.boldCheckBox = QCheckBox("굵게(&B)")
         closeButton = QPushButton("닫기(&C)")
         closeButton.setAutoDefault(False)
         
         layout = QVBoxLayout()
         layout.addWidget(self.label)
         layout.addWidget(self.lineEdit)
+        layout.addWidget(self.boldCheckBox)
         layout.addWidget(closeButton)
         self.setLayout(layout)
 
@@ -38,12 +40,20 @@ class Form(QDialog):
                         self.UpdateLabel)
         self.connect(closeButton, SIGNAL("clicked()"),
                         self, SLOT("reject()"))
+        self.connect(self.boldCheckBox, SIGNAL("stateChanged(int)"),
+                        self.LabelBold)
 
         self.setWindowTitle("Main Dialog")
 
     def UpdateLabel(self):
-        self.label.setText("" + self.lineEdit.text() +
-                            "")
+        self.label.setText(self.labelFormat.format(self.lineEdit.text()))
+
+    def LabelBold(self):
+        if self.boldCheckBox.isChecked():
+            self.labelFormat = "{}"
+        else:
+            self.labelFormat = "{}"
+        self.UpdateLabel()
     
 if __name__ == "__main__":
     app = QApplication(sys.argv)

점점 코드가 길어지고 있다. 그러나 특별한 것 없이, 체크 박스는 위젯만 추가하고 커넥트 메소드로 연결만 해주었다.

그래서 LabelBold 메소드를 주로 보면, 체크 박스가 체크 되어있다면 (즉, 굵게 설정하도록 되어 있다면) 레이블에 포맷을 설정해주는 것이다.

그렇지 않다면 포맷 없이 그냥 텍스트를 보여주게 된다. 그리고 포맷이 지정된 후에는 레이블을 갱신해줘야 하므로 UpdateLabel 메소드를 한번 더 실행해주게 된다.

간단하지 않은가? 단순히 체크되어 있는 상태만 파악한 후 포맷을 지정함으로써 굵림을 설정해줄 수가 있다.

즉, 어떤 위젯이든지 시그널과 슬롯만 잘 파악해두면 쉽게 행동을 제어해줄 수 있다. 더 복잡한 것도 제어할 수 있지만 이것은 한참 이후에(그리고 나도 아직 안 배운...) 나올 내용이다.

그리고 위젯의 시그널과 슬롯은 PyQt 레퍼런스나 Qt 레퍼런스에 잘 나와 있으므로 이들을 참고하면 된다.


다음 글에서는 레이아웃에 대해서 알아 보겠다. 지금까지 위젯을 추가하면서 수직으로만 계속 추가해왔기 때문에 약간 위젯들 배치가 마음에 들지 않을 수 있다. 이를 레이아웃을 변경하면서 조절해보겠다.

댓글 1개:

  1. 현재 프로그램 상의 로직으로는 체크박스의 체크를 풀게 되면 Bold 역시 풀려야 하는데 실행 시켜보니 그렇게는 되지 않는 것 같습니다. 어느 부분이 잘못되어서 그런 걸까요?

    답글삭제