study/python

PyQt5

jjikky 2020. 11. 24. 22:33
반응형

 

  • PyQt5는 어플리케이션 프레임워크에 대한 파이썬 버전입니다. Qt는 플랫폼에 관계없이 다양한 기능을 포함하는 C++라이브러리이자 개발툴입니다.
  • PyQt5는 이러한 1000여개의 클래스들을 포함하는 파이썬 모듈의 모음입니다.
  • PyQt5는 윈도우, 리눅스, macOS, 안드로이드, iOS를 지원합니다.
  • PyQt5의 홈페이지에서 최신의 그리고 안정적인 버전의 PyQt5와 최신 버전의 문서를 얻을 수 있습니다.
  • PyQt5 개발자는 GPL과 상업용 라이센스 중 하나를 선택할 수 있습니다.

 

 

 

 

QLabel을 이용해 출력내용 작성

 

 

 

Button

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(150, 250, 350, 350)  # 창의 위치와 크기
        self.setWindowTitle("using Button")
        
        self.UI()
        
    def UI(self):
        self.text=QLabel("text",self)
        enterButton = QPushButton("Enter",self)
        exitButton = QPushButton("Exit",self)
        self.text.move(160,50)
        enterButton.move(100,80)
        exitButton.move(200,80)
        enterButton.clicked.connect(self.enterFunc)
        exitButton.clicked.connect(self.exitFunc)
        self.show()
        
    def enterFunc(self):
        self.text.setText("You Clicked Enter")
        self.text.resize(150,20)

    def exitFunc(self):
        self.text.setText("You Clicked Exit") 
        self.text.resize(150,20)
        
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

결과

 

 

LineEdit

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(150, 250, 350, 350)  # 창의 위치와 크기
        self.setWindowTitle("using LineEdit")
        
        self.UI()
        
    def UI(self):
        self.nameTextBox = QLineEdit(self)
        self.nameTextBox.setPlaceholderText("Please enter your name")
        self.nameTextBox.move(120,50)
        self.passTextBox = QLineEdit(self)
        self.passTextBox.setPlaceholderText("Please enter your password")
        self.passTextBox.setEchoMode(QLineEdit.Password)
        self.passTextBox.move(120,80)
        button = QPushButton("Save",self)
        button.move(180,110)
        button.clicked.connect(self.getValues)
        
        self.show()
        
    def getValues(self):
        name = self.nameTextBox.text()
        pw = self.passTextBox.text()
        self.setWindowTitle("Your name is "+name+"Your pw is"+pw)
        

    def exitFunc(self):
        self.text.setText("You Clicked Exit") 
        self.text.resize(150,20)
        
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

결과

 

 

이미지 넣기

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(50, 50, 1000, 900)  # 창의 위치와 크기
        self.setWindowTitle("using Images")
        self.UI()
        
    def UI(self):
        self.image = QLabel(self)
        self.image.setPixmap(QPixmap('cat.jpg'))
        
        removeButton = QPushButton("Remove",self)
        removeButton.move(150,220)
        removeButton.clicked.connect(self.removeImg)
        showButton = QPushButton("Show",self)
        showButton.clicked.connect(self.showImg)
        showButton.move(260,220)
        self.show()
        
    def removeImg(self):
        self.image.close()
    def showImg(self):
        self.image.show()
        
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

remove / show 버튼 클릭시 사진 사라짐 / 나타남

 

checkBox

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(50, 50, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using CheckBox")
        
        self.UI()
        
    def UI(self):
        self.name = QLineEdit(self)
        self.name.setPlaceholderText("Please enter your name")
        self.surname = QLineEdit(self)
        self.surname.setPlaceholderText("Family name을 입력하세요")
        self.name.move(150,50)
        self.surname.move(150,80)
        self.remember = QCheckBox("Remember me",self)
        self.remember.move(150,110)
        button = QPushButton("Submit",self)
        button.move(200,140)
        button.clicked.connect(self.submit)
        
        self.show()
        
    def submit(self):
        if (self.remember.isChecked()):
            print("Name : "+self.name.text()+ "\nSurname : "+self.surname.text()+"\nRemember me checked")
        else :
            print("Name : "+self.name.text()+ "\nSurname : "+self.surname.text()+"\nRemember me not checked")

        
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

출력 결과

 

 

 

ComboBox

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(250, 150, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using Comboboxes")
        self.UI()
        
    def UI(self):
        self.combo = QComboBox(self)
        self.combo.move(150,100)
        button = QPushButton("Save",self)
        button.move(150,130)
        button.clicked.connect(self.getValue)
        self.combo.addItem("Python")
        self.combo.addItems(["C","C#","PHP"])
        list1 = ["Batman","Superman","Spiderman"]

        for name in list1:
            self.combo.addItem(name)
            
        for number in range(18,101):
            self.combo.addItem(str(number))

        self.show()
        
    def getValue(self):
        value = self.combo.currentText()
        print(value)
        
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

(왼) 실행 직후 화면 (오) 선택 후 save 한 화면 (하) save시 출력 결과

 

 

RadioButton

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(50, 50, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using RadioButton")
        
        self.UI()
        
    def UI(self):
        self.name = QLineEdit(self)
        self.name.setPlaceholderText("Please enter your name")
        self.surname = QLineEdit(self)
        self.surname.setPlaceholderText("Please enter your first name")
        self.name.move(150,50)
        self.surname.move(150,80)
        self.male = QRadioButton("남성",self)
        self.female = QRadioButton("여성",self)
        self.female.setChecked(True)
        self.female.move(150,110)
        self.male.move(240,110)
        button = QPushButton("Submit",self)
        button.move(200,140)
        button.clicked.connect(self.submit)
        
        self.show()
        
    def submit(self):
        if (self.male.isChecked()):
            print("Name : "+self.name.text()+ "\nSurname : "+self.surname.text()+"\n남성입니다.")
        else :
            print("Name : "+self.name.text()+ "\nSurname : "+self.surname.text()+"\n여성입니다.")

        
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

결과

 

 

Message Boxes

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont

font = QFont("Times", 12)

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(250, 150, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using Message Boxes")
        self.UI()
        
    def UI(self):
        button = QPushButton("Click Me!", self)
        button.setFont(font)
        button.move(200, 150)
        button.clicked.connect(self.messageBox)
        self.show()
        
    def messageBox(self):
        # mbox = QMessageBox.information(self,"information","You Logged Out!")
        mbox = QMessageBox.question(self,"Warning!!!", "Are you sure to exit?",QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel,QMessageBox.No)
        if mbox == QMessageBox.Yes:
            sys.exit()
        elif mbox == QMessageBox.No:
            print("You clicked No Button")
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

no를 선택했을 때의 결과

 

SpinBox

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont

font = QFont("Times", 16)

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(250, 150, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using Spin Boxes")
        self.UI()
        
    def UI(self):
       self.spinBox = QSpinBox(self)
       self.spinBox.move(150,100)
       self.spinBox.setFont(font)
       # self.spinBox.setMinimum(25)
       # self.spinBox.setMaximum(110)
       self.spinBox.setRange(25,110)
       # self.spinBox.setPrefix("$ ")
       self.spinBox.setSuffix(" cm")
       self.spinBox.setSingleStep(5)
       # self.spinBox.valueChanged.connect(self.getValue)
       button = QPushButton("Send",self)
       button.move(150,140)
       button.clicked.connect(self.getValue)
       
       self.show()
    
    def getValue(self):
        value=self.spinBox.value()
        print(value)
      
        
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

send 클릭시 그 값 출력

 

 

 

Text Editor

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont

font = QFont("Times", 14)

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(250, 150, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using Text editor")
        self.UI()
        
    def UI(self):
        self.editor = QTextEdit(self)
        self.editor.move(150,80)
        button = QPushButton("Send",self)
        self.editor.setAcceptRichText(False)
        button.move(330,280)
        button.clicked.connect(self.getValue)
        self.show()
    
    
    def getValue(self):
        text = self.editor.toPlainText()
        print(text)
      
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

 

 

Timer

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QTimer

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(250, 150, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using Timer")
        self.UI()
        
    def UI(self):
        self.colorLabel = QLabel(self)
        self.colorLabel.resize(250,250)
        self.colorLabel.setStyleSheet("background-color:green")
        self.colorLabel.move(40,20)
        ###################Buttons#######################
        btnStart = QPushButton("Start",self)
        btnStart.move(80,300)
        btnStart.clicked.connect(self.start)
        btnStop = QPushButton("Stop",self)
        btnStop.move(190,300)
        btnStop.clicked.connect(self.stop)
        ###################Timer#########################
        self.timer = QTimer()
        self.timer.setInterval(100)  #0.1초
        self.timer.timeout.connect(self.changeColor)
        self.value=0
        self.show()
        
    def changeColor(self):
        if self.value==0:
            self.colorLabel.setStyleSheet("background-color:yellow")
            self.value=1
        else:
            self.colorLabel.setStyleSheet("background-color:red")
            self.value=0
    
    def start(self):
        self.timer.start()
        
    def stop(self):
        self.timer.stop()
        
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

초록색으로 시작해서 Start를 누르면 0.1초 간격으로 빨간색과 노란색 출력

 

 

List Widget

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(50, 50, 500, 500)  # 창의 위치와 크기
        self.setWindowTitle("using List widget")
        self.UI()
        
    def UI(self):
        self.addRecord = QLineEdit(self)
        self.addRecord.move(100,50)
        self.listWidget = QListWidget(self)
        self.listWidget.move(100,80)
        ####################################
        list1 = ["Batman","Superman","Spiderman"]
        self.listWidget.addItems(list1)
        self.listWidget.addItem("Heman")
        # for number in range(5,11)
        #   self.listwidget.addItem(str(number))
        #####################################
        btnAdd = QPushButton("Add",self)
        btnAdd.move(360,80)
        btnAdd.clicked.connect(self.funcAdd)
        btnDelete = QPushButton("Delete",self)
        btnDelete.move(360,110)
        btnDelete.clicked.connect(self.funcDelete)
        btnGet = QPushButton("Get",self)
        btnGet.move(360,140)
        btnGet.clicked.connect(self.funcGet)
        btnDeleteAll = QPushButton("Delete All",self)
        btnDeleteAll.move(360,170)
        btnDeleteAll.clicked.connect(self.funcDeleteAll)
        self.show()
        
    def funcAdd(self):
        val = self.addRecord.text()
        self.listWidget.addItem(val)
        self.addRecord.setText("")
    def funcDelete(self):
        id = self.listWidget.currentRow()
        print(id)
        self.listWidget.takeItem(id)
    def funcGet(self):
        val = self.listWidget.currentItem().text()
        print(val)
    def funcDeleteAll(self):
        self.listWidget.clear()
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

반응형