python을 이용해서 GUI를 구성하기.
예전 C#과 비슷한 느낌인 듯.
import sys
# 필요한 모듈 불러오기. 기본 UI 구성요소 제공 위젯 (클래스)들은 PyQt5.QtWidgets 모듈에 있음
# QIcon 사용하기 위해서 모듈 import
from PyQt5.QtGui import QIcon
import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QLabel, QAction, qApp, QFileDialog
# QtCore 모듈의 QCoreApplication 클래스 부르기.
from PyQt5.QtCore import QCoreApplication
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 아이콘 추가
self.setWindowIcon(QIcon("./web.png"))
# 프레임 만들기
"""
setWindowTitle() 메서드는 타이틀바에 나타나는 창의 제목을 설정.
move() 메서드는 위젯을 스크린의 x=300px, y=300px의 위치로 이동.
resize() 메서드는 위젯의 크기를 너비 400px, 높이 200px로 조절.
show() 메서드는 위젯을 스크린에 보임.
"""
self.setWindowTitle('My First Application')
self.move(300, 300)
self.resize(400, 200)
# 창 닫기 버튼 추가
"""
푸시버튼을 하나.
이 버튼 (btn)은 QPushButton 클래스의 인스턴스.
생성자 (QPushButton())의 첫 번째 파라미터에는 버튼에 표시될 텍스트를 입력, 두 번째 파라미터에는 버튼이 위치할 부모 위젯을 입력.
푸시버튼 위젯에 대한 자세한 설명은 QPushButton 페이지 참고하기.
"""
btn = QPushButton('Quit', self)
btn.move(0,20)
btn.resize(btn.sizeHint())
btn.clicked.connect(QCoreApplication.instance().quit)
# 상태바 테스트 위한 코드
self.statusBar().showMessage('준비중...')
# 상태창 테스트를 위한 label 추가
self.label = QLabel("00000000000", self)
self.label.move(40, 40)
# 상태창 테스트를 위한 Start 버튼 추가
self.pb = QPushButton("Start", self)
self.pb.clicked.connect(self.count_number)
self.pb.move(150, 40)
# 메뉴바 만들기
exitAction = QAction('&Exit', self)
# 단축키
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(qApp.quit)
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
# 추가
loadfile = QAction('laod File ...', self)
savefile = QAction('save File ...', self)
loadfile.triggered.connect(self.add_open)
savefile.triggered.connect(self.add_save)
fileMenu.addAction(exitAction)
fileMenu.addAction(loadfile)
fileMenu.addAction(savefile)
self.show()
def count_number(self) :
"""
상태바 테스트 함수
"""
# 상태바 생성 코드
self.statusBar().showMessage('작업중...')
# PyQt5를 쓰면서 데이터가 계속 업데이트 되지 않을 때 반드시 repaint() 부분을 실행.
self.statusBar().repaint()
for i in range(1, 100000) :
print(i)
self.label.setText(str(i))
self.label.repaint()
self.statusBar().showMessage("준비중...")
def add_open(self):
FileOpen = QFileDialog.getOpenFileName(self, 'Open file', './')
print(FileOpen)
def add_save(self):
FileSave = QFileDialog.getSaveFileName(self, 'Save file', './')
print(FileSave)
if __name__ == '__main__':
# 모든 PyQt5 어플리케이션은 어플리케이션 객체를 생성.
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
슬라이더 만들어보기.
from PyQt5.QtWidgets import (QWidget, QSlider, QHBoxLayout,
QLabel, QApplication)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout()
sld = QSlider(Qt.Vertical, self)
sld.setFocusPolicy(Qt.NoFocus)
sld.setRange(0, 100)
sld.setPageStep(5)
sld.valueChanged.connect(self.changeValue)
self.label = QLabel("0", self)
self.label.setStyleSheet('QLabel { background: #007AA5; border-radius: 3px;}')
self.label.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
self.label.setMinimumWidth(80)
hbox.addStretch()
hbox.addWidget(sld)
hbox.addSpacing(15)
hbox.addWidget(self.label)
hbox.addStretch()
self.setLayout(hbox)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('QSlider')
self.show()
def changeValue(self, value):
self.label.setText(str(value))
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
다른 종류들은 https://wikidocs.net/book/2165 참고하기.
다음번엔 여러개 섞어서 새로운거 해볼 예정.