메인 윈도우
PyQt에서 메인윈도우는 QMainWindow 클래스로 표현되는데, 메인 메뉴 및 툴바, 그리고 하단에 상태바 등을 갖는 윈도우이다. 단순히 GUI 프로그램은 다이얼로그를 사용할 수 있겠지만, 많은 복잡한 GUI 프로그램은 종종 메인윈도우를 사용한다.
메인 윈도우를 사용하기 위해서는 QMainWindow 클래스로부터 파생된 서브클래스를 만들며, 그 생성자에 위젯 컨트롤들을 배치하게 된다. 아래 예제에서 MyWindow 는 QMainWindow로부터 파생된 사용자 정의 메인 윈도우 클래스이며, 그 생성자에 버튼 2개를 추가하고 있다.
import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MyWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) # 윈도우 특성 설정 self.setWindowTitle('내 윈도우') # 윈도우 타이클 지정 self.setGeometry(600, 600, 400, 400) # 윈도우 위치/크기 설정 self.setWindowIcon(QIcon('umbrella.png')) # 아이콘 지정 self.statusBar().showMessage('준비') # 버튼1 추가 btn1 = QPushButton('메시지 버튼', self) btn1.setToolTip('이 버튼을 누르면 메시지 박스가 나옴') btn1.resize(btn1.sizeHint()) btn1.move(50, 50) btn1.clicked.connect(self.btnClicked) # 종료 버튼 추가 btnQuit = QPushButton('종료', self) btnQuit.move(50, 100) btnQuit.clicked.connect(QCoreApplication.instance().quit) # 윈도우 화면에 표시 self.show() def btnClicked(self): QMessageBox.information(self, "버튼", "버튼 클릭!") def main(): app = QApplication(sys.argv) ex = MyWindow() sys.exit(app.exec_()) if __name__ == '__main__': main()
MyWindow 생성자의 첫 부분은 윈도우 혹은 폼의 속성을 설정하는 코드들이다. setWindowTitle() 메서드는 윈도우 타이틀을 지정하는 것이고, setGeometry() 메서드는 윈도우의 위치 및 크기를 지정하는 것이다. setWindowIcon()는 윈도우 좌측 상단에 폼 아이콘을 설정하는 것이며, statusBar()는 윈도우 하단의 상태바를 참조할 때 사용한다.
위 예제에서 윈도우 특성 설정 후에 두 개의 버튼을 추가하고 있는데, 첫째는 "메시지 버튼" 이라고 쓰인 버튼(btn1)으로 btnClicked() 라는 이벤트핸들러와 연결되어 있다. 두번째 버튼(btnQuit)은 종료 버튼으로 이 버튼은 PyQt에서 제공하는 quit 메서드를 호출하여 프로그램을 종료하게 한다.