728x90
반응형
UI 화면 띄우기
import sys
from PyQt5.QtWidgets import QApplication, QWidget
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('My Window')
# self.setGeometry(300, 300, 300, 200) # 윈도우 크기, 위치
self.move(300, 300)
self.resize(400, 200)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())

메뉴 만들기
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp
from PyQt5.QtGui import QIcon
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
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()
menubar.setNativeMenuBar(False)
filemenu = menubar.addMenu('&File') # 상단 메인메뉴
filemenu.addAction(exitAction)
self.setWindowTitle('Menubar')
self.setGeometry(300, 300, 300, 200)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())

버튼 만들기
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
label1 = QLabel('Label1', self)
label1.move(20, 20)
label2 = QLabel('Label2', self)
label2.move(20, 60)
btn1 = QPushButton('Button1', self)
btn1.move(80, 13)
btn2 = QPushButton('Button2', self)
btn2.move(80, 53)
self.setWindowTitle('Absolute Positioning')
self.setGeometry(300, 300, 400, 200)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())

레이아웃
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
okButton = QPushButton('OK')
cancelButton = QPushButton('Cancel')
hbox = QHBoxLayout()
hbox.addStretch(1) # 빈공간 추가
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
hbox.addStretch(1)
vbox = QVBoxLayout()
vbox.addStretch(3) # hbox내에서 아래로 밀어내림(3:1 레이아웃)
vbox.addLayout(hbox)
vbox.addStretch(1)
self.setLayout(vbox)
self.setWindowTitle('Box Layout')
self.setGeometry(300, 300, 300, 200)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())

압력화면 만들기
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLabel, QLineEdit, QTextEdit)
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
grid.addWidget(QLabel('Title:'), 0, 0)
grid.addWidget(QLabel('Author:'), 1, 0)
grid.addWidget(QLabel('Review:'), 2, 0)
grid.addWidget(QLineEdit(), 0, 1)
grid.addWidget(QLineEdit(), 1, 1)
grid.addWidget(QTextEdit(), 2, 1)
self.setWindowTitle('QGridLayout')
self.setGeometry(300, 300, 300, 200)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())

Event 연결 및 MessageBox 만들기
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QMessageBox
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
okButton = QPushButton('OK')
cancelButton = QPushButton('Cancel')
hbox = QHBoxLayout()
hbox.addStretch(1) # 빈공간 추가
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
hbox.addStretch(1)
vbox = QVBoxLayout()
vbox.addStretch(3) # hbox를 아래로 밀어내립니다(3:1 레이아웃)
vbox.addLayout(hbox)
vbox.addStretch(1)
self.setLayout(vbox)
okButton.clicked.connect(self.btnClickedOk)
cancelButton.clicked.connect(self.btnClickedCancel)
self.setWindowTitle('Box Layout')
self.setGeometry(300, 300, 300, 200)
self.show()
def MsgBox(self, msg):
# QMessageBox.Save | QMessageBox.Cancel | QMessageBox.Reset | QMessageBox.No, QMessageBox.No
btnMsgBox = QMessageBox.question(
self, 'Title', msg,
QMessageBox.Yes
)
if btnMsgBox == QMessageBox.Yes:
print('Yes clicked.')
def btnClickedOk(self):
self.MsgBox('O.K')
def btnClickedCancel(self):
self.MsgBox('Cancel')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())



여러 도형 그리기
import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QPen, QColor, QBrush
from PyQt5.QtCore import Qt
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 400, 300)
self.setWindowTitle('Points')
self.show()
def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
self.draw_point(qp)
self.draw_line(qp)
self.draw_rect(qp)
qp.end()
def draw_point(self, qp):
qp.setPen(QPen(Qt.blue, 8))
qp.drawPoint(self.width()/2, self.height()/2)
def draw_line(self, qp):
qp.setPen(QPen(Qt.blue, 8))
qp.drawLine(30, 230, 200, 50)
qp.setPen(QPen(Qt.green, 12))
qp.drawLine(140, 60, 320, 280)
qp.setPen(QPen(Qt.red, 16))
qp.drawLine(330, 250, 40, 190)
def draw_rect(self, qp):
qp.setBrush(QColor(180, 100, 160))
qp.setPen(QPen(QColor(60, 60, 60), 3))
qp.drawRect(20, 20, 100, 100)
qp.setBrush(QColor(40, 150, 20))
qp.setPen(QPen(Qt.blue, 2))
qp.drawRect(180, 120, 50, 120)
qp.setBrush(Qt.yellow)
qp.setPen(QPen(Qt.red, 5))
qp.drawRect(280, 30, 80, 40)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())

Popup창 연계
여러 개의 파일로 코드 분리하고 Popup창에서 값 연계
run.py
import sys
from multiMain import MainWindow
from PyQt5.QtWidgets import *
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
multiMain.py
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from multiSub import SubWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Main Window')
self.setGeometry(100, 100, 300, 200)
layout = QVBoxLayout()
layout.addStretch(1)
label = QLabel("-")
label.setAlignment(Qt.AlignCenter)
font = label.font()
font.setPointSize(30)
label.setFont(font)
self.label = label
btn = QPushButton("Popup Input Window")
btn.clicked.connect(self.onbtnClickedPopup)
layout.addWidget(label)
layout.addWidget(btn)
layout.addStretch(1)
centralWidget = QWidget()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
self.center()
def center(self): # 윈도우의 위치를 가운데로 이동
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def onbtnClickedPopup(self):
win = SubWindow()
r = win.showModal()
if r:
text = win.edit.text()
self.label.setText(text)
def show(self):
super().show()
multiSub.py
import sys
from PyQt5.QtWidgets import *
class SubWindow(QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Sub Window')
self.setGeometry(100, 100, 200, 100)
layout = QVBoxLayout()
layout.addStretch(1)
edit = QLineEdit()
font = edit.font()
font.setPointSize(20)
edit.setFont(font)
self.edit = edit
subLayout = QHBoxLayout()
btnOK = QPushButton("O.K")
btnOK.clicked.connect(self.onbtnClickedOK)
btnCancel = QPushButton("Cacel")
btnCancel.clicked.connect(self.onbtnClickedCancel)
layout.addWidget(edit)
subLayout.addWidget(btnOK)
subLayout.addWidget(btnCancel)
layout.addLayout(subLayout)
layout.addStretch(1)
self.setLayout(layout)
self.center()
def center(self): # 윈도우의 위치를 가운데로 이동
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def onbtnClickedOK(self):
self.accept()
def onbtnClickedCancel(self):
self.reject()
def showModal(self):
return super().exec_()



728x90
반응형
'프로그램' 카테고리의 다른 글
[파이썬/법칙] 파레토 법칙(80/20법칙) (2) | 2022.08.20 |
---|---|
[파이썬] 주식 종목코드, 종목명 연계 (1) | 2022.08.20 |
[윈도우] 파파고에서 음성 파일 받기 (0) | 2022.08.18 |
[윈도우] 화면캡쳐(원도우+Alt+PrtSc) 바로 저장 (0) | 2022.08.18 |
[파이썬] 위키백과 검색 데이터 받기 (크롤링) (0) | 2022.08.18 |
댓글