PyQt 예제 1.3

이번에는 단순하게 위젯을 바로 창으로 사용하지 않고 부모 창을 만든 다음에 그 안에 위젯을 넣는 방법을 소개하겠다.


# Form 클래스 내에 레이블을 설정

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

__version__ = "1.3.1"

class Form(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.label = QLabel("Hello, PyQt!")
        
        layout = QVBoxLayout()
        layout.addWidget(self.label)

        self.setLayout(layout)
    
if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    app.exec_()

이전 예제를 그대로 변경한 것이다. 따라서 나오는 화면은 똑같지만 내부 구성은 조금 달라졌다. 먼저, Form 클래스를 정의하는데, QDialog를 상속시켰다.

QDialog 에 의해 창이 생성되도록 하기 위해서이고, QDialog 를 상속하므로써 추가적인 메소드(예를 들어, 창 닫기, 크기 확대 및 축소 등)를 정의 할 필요가 없어지기 때문이다. 그리고 지난 번에도 언급했듯이, PyQt에서 어떤 위젯이든 간에 최상위 윈도우가 될 수 있다.

Form 클래스를 초기화 시킬 때 parent 인자를 필요로 하게끔 했는데, 이것은 재사용을 위한 것이다. 다른 윈도우가 Form 클래스를 자식으로써 사용할 수 있기 때문이다. 그러나 여기서는 Form 클래스가 최상위 윈도우이기 때문에 None 객체를 넘겨서 이 클래스의 부모가 없는 것으로 처리해준다.

그 다음으로 지난번에 사용한 QLabel 객체를 생성한다. 그리고 QVBoxLayout 이라는 객체를 생성하는데, 이것은 수직 창 레이아웃을 생성해주는 객체이다. 이 레이아웃 안에 위젯을 추가하면 위젯이 수직 방향으로 배치가 된다.

레이아웃을 생성한 후에 addWidget 메소드를 이용해서 위젯을 넘겨주면 레이아웃에 위젯이 추가된다.

그 다음 Form 클래스의 최종 레이아웃으로 layout을 사용한다고 설정해주면 Form 클래스가 레이아웃들의 위젯을 관리하게 된다. 즉, PyQt 에서 자동으로 부모를 Form 클래스로 재설정해주게 된다.

추가로 Form 클래스의 마지막에 self.setWindowTitle("Main Dialog") 를 추가해주면 창의 제목을 지정해줄 수 있다.

댓글 없음:

댓글 쓰기