Tutorials
이 페이지에서는 PyQt5 어플리케이션에서 중심 위젯을 지정하고,
메뉴바의 메뉴 선택 시 특정 동작을 수행하도록 하는 프로그램을 만들어봅니다.
import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QAction, qApp, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QTextEdit) from PyQt5.QtCore import QDate, Qt from PyQt5.QtGui import QIcon class MyApp(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): addDateAction = QAction(QIcon('text.png'), 'Add', self) addDateAction.setShortcut('Ctrl+D') addDateAction.setStatusTip('Add Today\'s Date') addDateAction.triggered.connect(self.add_date) exitAction = QAction(QIcon('exit.png'), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit Application') exitAction.triggered.connect(qApp.quit) self.statusBar() menubar = self.menuBar() filemenu = menubar.addMenu('&File') filemenu.addAction(addDateAction) filemenu.addAction(exitAction) self.cent_widget = CentWidget() self.setCentralWidget(self.cent_widget) self.setWindowTitle('Menubar') self.setGeometry(300, 300, 400, 300) self.show() def add_date(self): today = QDate.currentDate().toString(Qt.ISODate) self.cent_widget.te.setText(today) class CentWidget(QWidget): def __init__(self): super().__init__() self.te = QTextEdit() self.okButton = QPushButton('OK') self.cancelButton = QPushButton('Cancel') hbox = QHBoxLayout() hbox.addStretch(1) hbox.addWidget(self.okButton) hbox.addWidget(self.cancelButton) hbox.addStretch(1) vbox = QVBoxLayout() vbox.addStretch(1) vbox.addWidget(self.te) vbox.addLayout(hbox) vbox.addStretch(1) self.setLayout(vbox) if __name__ == '__main__': app = QApplication(sys.argv) ex = MyApp() sys.exit(app.exec_())
PyQt5의 소개와 기초 내용에 대해서는 먼저 PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램 페이지를 참고하세요.
addDateAction, exitAction은 각각 QAction 객체로서 이벤트 핸들러에 연결되어서 특정 동작을 수행합니다.
addDateAction은 add_date() 메서드에 연결되어서 어플리케이션의 텍스트 편집기에 오늘의 날짜를 입력합니다.
PyQt5의 날짜와 시간을 표시하는 방법에 대해서는 이 링크를 참고하세요.
exitAction은 qApp.quit에 연결되어서 메뉴 선택 시 어플리케이션을 종료하는 기능을 갖습니다.
menuBar()를 호출함으로써 메뉴바를 하나 만들고, addMenu()를 사용해서 ‘File’ 메뉴를 하나 추가했습니다.
그리고 addAction()를 사용해서 ‘File’ 메뉴는 두 개의 동작을 포함하도록 했습니다.
self.cent_widget은 CentWidget 클래스의 인스턴스로서, 텍스트 편집기와 두 개의 푸시 버튼을 포함합니다.
setCentralWidget()을 사용해서 이 위젯 (self.cent_widget)을 어플리케이션의 중심 위젯 (central widget)으로 지정했습니다.
위젯을 배치하는 방식에 대해서는 박스 레이아웃 페이지를 참고하세요.
아래 그림과 같이 메뉴의 Add 동작을 클릭하면 텍스트 편집기가 초기화되면서 첫 줄에 오늘의 날짜가 입력됩니다.