PyQt 예제 1.5.1

지난 번에 connect 메소드를 통해서 사용자의 입력에 대해 반응 하는 것을 다루어봤다. 이번에는 이러한 기능을 하는 대표적인 위젯인 버튼을 추가해보겠다.


-__version__ = "1.4.3"
+__version__ = "1.5.1"
 
 class Form(QDialog):
     def __init__(self, parent=None):
@@ -24,14 +24,20 @@ class Form(QDialog):
         self.label = QLabel("Hello, PyQt!")
         
         self.lineEdit = QLineEdit("This is LineEdit Widget")
+
+        closeButton = QPushButton("닫기(&C)")
+        closeButton.setAutoDefault(False)
         
         layout = QVBoxLayout()
         layout.addWidget(self.label)
         layout.addWidget(self.lineEdit)
+        layout.addWidget(closeButton)
         self.setLayout(layout)
 
         self.connect(self.lineEdit, SIGNAL("returnPressed()"),
                         self.UpdateLabel)
+        self.connect(closeButton, SIGNAL("clicked()"),
+                        self, SLOT("reject()"))
 
         self.setWindowTitle("Main Dialog")
버튼의 클래스는 QPushButton 이다. 버튼의 이름과 함께 객체를 생성하면 된다. 이때, 이름에 & 가 들어가 있는데, 이것은 단축키를 의미한다. 버튼이나 메뉴에 보면 영문자 밑에 밑줄이 그어져 있는 것을 알 수 있다.

Alt 키와 해당하는 영문자를 누르면 단축키가 작동하는데, 이것을 지정해주는 것이 & 문자이다. & 문자 이후에 오는 영문자 밑에 자동으로 밑줄이 붙고, 단축키를 지정해준다. 즉, 버튼을 클릭하기 위해서 Alt + C 를 누르면 버튼이 클릭된다.

그리고 버튼의 메소드로 setAutoDefault 를 설정하고 있는데, 이것은 자동으로 기본 버튼으로 사용할 것인지 묻는 것이다. 기본 버튼이 되면 대화 상자에서 엔터키를 눌렸을 때 기본적으로 실행되는 버튼이 되는 것이다.

일반적으로 대화 상자에서 엔터를 누르면 "확인" 버튼이 작동한 것이 되는 것과 마찬가지다. 그런데 지금 이 대화 상자에서는 엔터키에 대해서 라인 에디터가 사용하고 있기 때문에 이를 해제 시켜줘야 한다. 안 그러면 라인 에디터에 포커스가 있을 때 엔터를 누르면 버튼이 실행된다.


그리고 아래에서 버튼을 레이아웃에 추가해주고, 지난 번과 비슷하게 버튼에 시그널과 슬롯을 할당해주었다. 이전과는 달리, 인자가 4개인데, 앞에 두 인자는 이전과 같이, 시그널을 보내는 객체와 시그널을 사용해준다. 그리고 3번째는 그 시그널에 대해 반응할 객체이고, 4번째는 그 객체가 수행할 행동을 넣어준다.

이때, SIGNAL 과 비슷하게 SLOT을 썼는데, 이것은 미리 정의된 슬롯이 Qt용 메소드이기 때문이다. 이전에는 파이썬 메소드를 썼기 때문에 그냥 슬롯에 대한 객체도 인자로 주지 않고, 바로 메소드를 넣어주었다.

하지만 Qt용 메소드를 사용할 때는 지금과 같이 객체를 쓰고 SLOT 에 메소드를 써주어야 한다.

self 는 대화 상자이므로 대화 상자가 reject 메소드를 호출하면서 창을 닫게 된다.

댓글 없음:

댓글 쓰기