23.02.10 Day10

오윤범·2023년 2월 10일
0
post-custom-banner

Python/PyQt(Widget)

  • 콤보박스

import sys
from PyQt5.QtWidgets import *
class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.label1=QLabel('option1',self)#self. 으로 변수 선언 시 내 class인 MyApp 전체에서 Label1이란 변수 사용하고자 할 때.
        self.label1.move(50,150)#하단에 라벨 생성
        cb=QComboBox(self)
        cb.addItem('option1')
        cb.addItem('option2')
        cb.addItem('option3')
        cb.addItem('option4')
        cb.move(50,50)#50,50위치에 option1,2,3,4를 항목으로 가진 comboBox생성
        #Signal 발생시 (Signal=사용자 검색따위가 발생시) 
        cb.activated[str].connect(self.onActivated)#콤보박스 옵션 선택시 onActivated 호출       
        self.setWindowTitle('콤보박스')
        self.setGeometry(1000,300,300,300)
        self.show()
    def onActivated(self,text):
        self.label1.setText(text+' 선택')#콤보박스 선택 시 라벨에 콤보박스 text 나오게
        self.label1.adjustSize()#크기 자동조절
if __name__=='__main__':
    app=QApplication(sys.argv)
    ex=MyApp()
    sys.exit(app.exec_())
-------------------------출력------------------------
-------------------------출력------------------------

--> signal(event/콤보박스 항목 변경) 발생 시 slot 함수(개발자가 만든 onActivated함수)를 호출하여 해당 이벤트를 처리함
--> self.Label=QLabel('option1',self)와 같이 self.~ 형태로 변수 선언 시 내가 생성한 class(MyApp) 내부에서 Label1이라는 변수를 자유롭게 사용하겠다는 의미

  • LineEdit

import sys
from PyQt5.QtWidgets import *
class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.label1=QLabel(self)
        self.label1.move(60,40)#해당 위치에 빈 라벨 생성
        txtqline=QLineEdit(self)#txtQLineEdit 위젯 생성
        txtqline.setEchoMode(2)#qline에 Password 형태로 출력
        txtqline.move(60,100)
        txtqline.textChanged[str].connect(self.onChanged)#txtqline텍스트 바뀌면 onchanged 호출
        self.setWindowTitle('LineEdit')
        self.setGeometry(1000,300,300,300)
        self.show()
    def onChanged(self,text):#text바뀌면 onChanged호출
        self.label1.setText(text)#txtqline 바뀔때마다 label에 해당 텍스트 뿌려줌
        self.label1.adjustSize()
if __name__=='__main__':
    app=QApplication(sys.argv)
    ex=MyApp()
    sys.exit(app.exec_())
-------------------------출력------------------------
-------------------------출력------------------------

  • Pixmap

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        pixmap=QPixmap('./images/cat.png')
        label_image=QLabel()
        label_image.setPixmap(pixmap)
        label_size=QLabel(str(pixmap.width())+'x'+str(pixmap.height()))
        label_size.setAlignment(Qt.AlignmentFlag.AlignCenter)
        vbox=QVBoxLayout(self)
        vbox.addWidget(label_image)
        vbox.addWidget(label_size)
        self.setLayout(vbox)
        self.setWindowTitle('LineEdit')
        self.setGeometry(1000,300,300,300)
        self.show()
if __name__=='__main__':
    app=QApplication(sys.argv)
    ex=MyApp()
    sys.exit(app.exec_())
-------------------------출력------------------------
-------------------------출력------------------------

  • dialog

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.button_dialog=QPushButton('Dialog',self)
        self.button_dialog.move(30,30)
        self.button_dialog.clicked.connect(self.onClicked)#signal(event)발생 시 onClicked 호출
        self.txtInput=QLineEdit(self)
        self.txtInput.move(30,60)
        self.setWindowTitle('Dialog')
        self.setGeometry(1000,300,300,300)
        self.show()
    def onClicked(self):
        text,ok=QInputDialog.getText(self,'Input Dialog','문자열 입력:')
        if ok:
            self.txtInput.setText(str(text))
if __name__=='__main__':
    app=QApplication(sys.argv)
    ex=MyApp()
    sys.exit(app.exec_())
-------------------------출력------------------------
-------------------------출력------------------------

  • fileDialog + CloseEvent

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.textEdit=QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.statusBar()
        openFile=QAction(QIcon('iot.png'),'Open',self)
        openFile.setShortcut('Ctrl+O')
        openFile.setStatusTip('Open New File')
        openFile.triggered.connect(self.onClicked)
        menubar=self.menuBar()
        menubar.setNativeMenuBar(False)
        filemenu=menubar.addMenu('&File')
        filemenu.addAction(openFile)
        self.setWindowTitle('File Dialog')
        self.setGeometry(1000,300,300,300)
        self.show()
    def onClicked(self):
            fname=QFileDialog.getOpenFileName(self,'Open file','./')#getOpenFileName메소드로 File선택
            if fname[0]:#파일을 선택했다면
                file = open(fname[0],'r',encoding='utf-8')
                with file:
                    data=file.read()
                    self.textEdit.setText(data)
                file.close()
            QMessageBox.about(self,'성공','로드했습니다') #로드 성공 메시지 출력
    def closeEvent(self, event):#closeEvent 재정의 
        reply = QMessageBox.question(self,'Message','종료됩니다. 종료하시겠습니까?',
                                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)#Yes or No / 기본 설정버튼 : NO
        if reply == QMessageBox.Yes: 
            event.accept()
        else:
            event.ignore()
if __name__=='__main__':
    app=QApplication(sys.argv)
    ex=MyApp()
    sys.exit(app.exec_())
-------------------------출력------------------------
-------------------------출력------------------------

post-custom-banner

0개의 댓글