메인 윈도우
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 메서드를 호출하여 프로그램을 종료하게 한다.