KG_KAIROS/Python
[KG_KAIROS] 파이썬 강의_6 (Pyqt5)
projectlim
2024. 7. 8. 16:49
728x90
반응형
SMALL
오늘은 24.07.08(월) 비가 오니까 교육장 가는 발걸음이 무겁지만 자취방 문을 박차고 나가봅니다.
교육장에 갔더니 강사님도 고달팟다고 하시네요.
그래도 할건해야죠....오늘의 강의는 Pyqt!!!
그래서 이번에 한 활동은 간단한 창 디자인!!
import sys
import PyQt5
from PyQt5 import *
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class main(QDialog): # 상속
def __init__(self):
super().__init__() # Qtdialog의 생성자
self.init_ui()
def init_ui(self):
win = QVBoxLayout()
self.label_widget1 = QLabel("Hello 1") # self를 사용하여 클래스 변수로 선언
self.label_widget2 = QLabel("Hello 2")
self.btn_widget = QPushButton("Click")
# 버튼 클릭 이벤트 연결
self.btn_widget.clicked.connect(self.on_click)
win.addWidget(self.label_widget1)
win.addWidget(self.label_widget2)
win.addWidget(self.btn_widget)
self.setLayout(win)
self.setWindowTitle("창 이름")
self.resize(500, 500)
self.show()
def on_click(self):
# 버튼이 클릭되었을 때 실행될 코드
self.label_widget1.setText("Button Clicked!")
if __name__ == '__main__':
app = QApplication(sys.argv)
main = main()
sys.exit(app.exec_())
해당 코드를 동작하면!
def init_ui(self):
win = QVBoxLayout()
self.label_widget1 = QLabel("Hello 1") # self를 사용하여 클래스 변수로 선언
self.label_widget2 = QLabel("Hello 2")
self.btn_widget = QPushButton("Click")
self.spinBox_widget = QSpinBox()
# 버튼 클릭 이벤트 연결
self.btn_widget.clicked.connect(self.on_click)
win.addWidget(self.label_widget1)
win.addWidget(self.label_widget2)
win.addWidget(self.btn_widget)
win.addWidget(self.spinBox_widget)
self.spinBox_widget.setMaximum(5)
self.btn_widget.clicked.connect(self.on_click)
self.setLayout(win)
self.setWindowTitle("창 이름")
self.resize(500, 500)
self.show()
spinBox를 추가해서 add 해봤습니다.
>>combo box 위젯 추가!!
self.comboBox_widget= QComboBox()
win.addWidget(self.comboBox_widget)
self.comboBox_widget.addItem("Motor1")
self.comboBox_widget.addItem("Motor2")
self.comboBox_widget.addItem("Motor3")\
뭐 이것저것 추가하면서 놀다가 이젠 라디오 버튼을 클릭하면 화면캡처를 하는 프로그램을 작성해 보겠습니다.
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class main(QDialog): # 상속
def __init__(self):
super().__init__() # QDialog의 생성자
self.init_ui()
def handle_rb(self, ch):
radio_button = self.sender()
text = radio_button.text()
if ch:
print(f"{text} is selected!")
else:
print(f"{text} is deselected!")
def init_ui(self):
win = QVBoxLayout()
self.list_w = QListWidget() # self.list_w로 변경
self.item_1 = QListWidgetItem("Dog")
self.item_2 = QListWidgetItem("Cat")
self.list_w.addItem(self.item_1)
self.list_w.addItem(self.item_2)
self.label_widget1 = QLabel("Hello 1") # self를 사용하여 클래스 변수로 선언
self.label_widget2 = QLabel("Hello 2")
self.btn_widget = QPushButton("Click")
self.spinBox_widget = QSpinBox()
self.comboBox_widget = QComboBox()
# 버튼 클릭 이벤트 연결
self.btn_widget.clicked.connect(self.on_click)
self.comboBox_widget.addItem("Motor1")
self.comboBox_widget.addItem("Motor2")
self.comboBox_widget.addItem("Motor3")
self.chechBox_widget1 = QCheckBox("op1")
self.chechBox_widget2 = QCheckBox("op2")
self.chechBox_widget1.setChecked(False)
self.chechBox_widget2.setChecked(False)
self.radioButton_widget1 = QRadioButton("uga1") # 텍스트 설정 수정
self.radioButton_widget2 = QRadioButton("uga2")
self.radioButton_widget1.toggled.connect(self.handle_rb)
self.radioButton_widget2.toggled.connect(self.handle_rb)
win.addWidget(self.label_widget1)
win.addWidget(self.label_widget2)
win.addWidget(self.btn_widget)
win.addWidget(self.spinBox_widget)
win.addWidget(self.comboBox_widget)
win.addWidget(self.chechBox_widget1)
win.addWidget(self.chechBox_widget2)
win.addWidget(self.radioButton_widget1)
win.addWidget(self.radioButton_widget2)
win.addWidget(self.list_w) # self.list_w로 변경
self.spinBox_widget.setMaximum(5)
self.setLayout(win)
self.setWindowTitle("창 이름")
self.resize(500, 500)
self.show()
def on_click(self):
# 버튼이 클릭되었을 때 실행될 코드
self.label_widget1.setText("Button Clicked!")
if __name__ == '__main__':
app = QApplication(sys.argv)
main = main()
sys.exit(app.exec_())
여러 기능들을 사용해본 결과입니다.
import cv2
import time
from threading import Thread
def VideoCapture():
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,240)
while (cap.isOpened()):
ret,img = cap.read()
img_roi= img[120:240,0:320]
cv2.imshow('my win',img_roi)
cv2.imshow('roi',img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
t1=Thread(target=VideoCapture)
t1.daemon=True
t1.start()
cv2.destroyAllWindows()
while True:
pass
스레드로 캡쳐 프로그램 실습입니다.
>>오늘의 최종 미션!
이번시간에 배운 ui radio버튼을 이용해서 저번시간에 배운 실시간 영상을 color와 gray로 나누는 미션을 받았습니다!!
from camera_class import VideoCapture
import cv2
import sys, os
import PyQt5
from PyQt5 import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Main(QDialog) : #QDialog 클래스 상속
def __init__(self): #Main의 생성자
super().__init__() #QDialog의 생성자
self.init_ui() #init_ui() 호출해서 인터페이스
def init_ui(self): #기본 화면 구성
win = QVBoxLayout() #vertical box
self.r1 = QRadioButton()
self.r2 = QRadioButton()
self.r1.setText('color')
self.r2.setText('gray')
self.r1.toggled.connect(self.set_color)
self.r2.toggled.connect(self.set_gray)
win.addWidget(self.r1)
win.addWidget(self.r2)
self.setLayout(win) #레이아웃 설정
self.setWindowTitle("창 이름") #창 이름 설정
self.resize(500,500) #화면 크기 조정
self.show() #화면 열기
def set_color(self):
vc.set_color()
def set_gray(self):
vc.set_gray()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Main() #Main 클래스의 인스턴스를 생성하고 main 변수에 할당해서 열린 창 유지.
vc = VideoCapture()
vc.start()
sys.exit(app.exec_())
위 코드는 레이아웃 코딩
import cv2
import time
from threading import Thread
class VideoCapture(Thread):
def __init__(self):
Thread.__init__(self)
self.cap = cv2.VideoCapture(0)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH,320)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT,240)
self.color = 0
def set_color(self):
self.color=0
def set_gray(self):
self.color=1
def run(self):
while (self.cap.isOpened()):
ret,img = self.cap.read()
img_roi= img[120:240,0:320]
if self.color == 0:
cv2.imshow('my win',img)
cv2.imshow('roi',img_roi)
else:
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('my win',img_gray)
cv2.imshow('roi',img_roi)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
self.cap.release()
if __name__ == '__main__':
vc=VideoCapture()
vc.start()
cv2.destroyAllWindows()
위 코드가 opencv활용 코드
color 췍~!, gray 췍~!
728x90
반응형
LIST