Lecture 강의

Undergrads 학부 Graduates 대학원 역학(Mech)/설계(Design)/FEM 인공지능(AI)/기계학습(ML)/IoT SAP/ETABS OpenSees/FeView/STKO 아바쿠스(Abaqus) 파이썬(Python)/매트랩(Matlab) 엑셀(Excel-VBA)/HTML 마이다스(MIDAS)

[03. 패키지 - PyQt] (5) 입력

작성자 : kim2kie

(2023-02-19)

조회수 : 13208

[참조]
초보자를 위한 Python GUI 프로그래밍 - PyQt5, 이세빈, 2020
https://wikidocs.net/35483


Qt Designer와 PyQt5를 이용하여 보다 쉽게 Python GUI 프로그래밍을 한다.
파이썬의 기본 문법을 학습한 후에 GUI 프로그래밍을 학습한다. 

(5) 입력
 1) QLineEdit
 2) QTextEdit, QPlainTextEdit
 3) QComboBox
 4) QSpinBox, QDoubleSpinBox
 5) QSlider, QDial
 6) QDateTimeEdit
 7) QDateEdit, QTimeEdit

 



 
(5) 입력
1) QLineEdit 

.self.LineEdit이름.textChanged.connect(함수)   # 글자가 바뀔 때 기능 실행
.self.LineEdit이름.returnPressed.connect(함수) # Enter키 때 기능 실행

.LineEdit이름(객체이름): lineedit

.LineEdit에 글자가 변경되면, 위에 있는 Label에 LineEdit에 있는 글자가 입력(셋팅)되고, 
.만약 Enter키가 눌리면 LineEdit에 들어있는 글자가 Print 된다. 
.그런 후 버튼을 누르면 LineEdit안에 "Change Text"라는 글자가 입력된다.

Ex) lineedit.ui, lineedit.py
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("lineedit.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #버튼 vs 함수
        self.lineedit.textChanged.connect(self.lineeditTextFunction)
        self.lineedit.returnPressed.connect(self.printTextFunction)
        self.btn_changeText.clicked.connect(self.changeTextFunction)

    def lineeditTextFunction(self) :
        self.lbl_textHere.setText(self.lineedit.text()) #Label에 글자 셋팅

    def printTextFunction(self) :
        print(self.lineedit.text()) #텍스트 출력

    def changeTextFunction(self) :
        self.lineedit.setText("Change Text") # 해당 문자열로 lineedit 셋팅

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_()

 

/그림 1. cmd prompt에서 실행한 lineedit.py/

 


2a) QTextEdit
.Rich Text는 글자의 색상, 크기, 기울임, 굵기 등을 조절할 수 있는 텍스트이며, 

.글자 입력 및 가져오기 함수
 -.toPlainText(): TextEdit에 쓰여있는 글자를 가져오기
 -.setPlainText(String): TextEdit에 PlainText 형식의 글을 입력(셋팅)
 -.setText(String): TextEdit에 RichText 형식의 글을 입력(셋팅)
 -.append(String): TextEdit에 글자를 추가
 -.clear(): TextEdit에 쓰여있는 글자 지우기

.글자 모양 함수
 -.setCurrentFont(QFont): TextEdit의 현재 폰트 셋팅
 -.setTextColor(QColor): TextEdit의 현재 색상 셋팅
 -.setFontItalic(Boolean): TextEdit에 글자 이탤릭체로 셋팅
 -.setFontUnderline(Boolean): TextEdit의 글자에 밑줄 적용
 -.setFontPointSize(size): TextEdit의 글자 크기 셋팅


Ex) textedit.ui, textedit.py
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("textedit.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)
        self.fontSize = 10

        #버튼 vs 함수
        self.btn_printTextEdit.clicked.connect(self.printTextEdit)
        self.btn_clearTextEdit.clicked.connect(self.clearTextEdit)
        self.btn_setFont.clicked.connect(self.setFont)
        self.btn_setFontItalic.clicked.connect(self.fontItalic)
        self.btn_setFontColor.clicked.connect(self.fontColorRed)
        self.btn_fontSizeUp.clicked.connect(self.fontSizeUp)
        self.btn_fontSizeDown.clicked.connect(self.fontSizeDown)

    def printTextEdit(self) :
        print(self.textedit.toPlainText())

    def clearTextEdit(self) :
        self.textedit.clear()

    def setFont(self) :
        fontvar = QFont("Apple SD Gothic Neo",10)
        self.textedit.setCurrentFont(fontvar)

    def fontItalic(self) :
        self.textedit.setFontItalic(True)

    def fontColorRed(self) :
        colorvar = QColor(255,0,0)
        self.textedit.setTextColor(colorvar)

    def fontSizeUp(self) :
        self.fontSize = self.fontSize + 1
        self.textedit.setFontPointSize(self.fontSize)

    def fontSizeDown(self) :
        self.fontSize = self.fontSize - 1
        self.textedit.setFontPointSize(self.fontSize)

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 

 

/그림 2a. cmd prompt에서 실행한 textedit.py/

 

.PrintText라는 버튼을 클릭하면 TextEdit에 있는 내용을 Print
.ClearText라는 버튼을 클릭하면 TextEdit의 내용이 모두 지워짐 
.Set Font를 클릭하면 "Apple SD Gothic Neo" 폰트로 변경
.Set Font Italic을 클릭하면 "이탤릭체"로 됨
.Set Font Color Red을 클릭하면 빨간색 폰트로 변경
.Font Size Up/Down을 클릭하면 폰트 사이즈를 변경

2b) QPlainTextEdit
.Plain Text는 시스템에서 지정된대로만 표시하는 텍스트이다.

.관련 함수
.toPlainText(): PlainTextEdit에 글자 가져오기
.setPlainText(String): PlainTextEdit에 새글 셋팅
.appendPlainText(String): PlainTextEdit에 글자 추가하기
.clear(): PlainTextEdit에 있는 글자 지우기

Ex) plaintextedit.ui, plaintextedit.py
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("plaintextedit.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #버튼 vs 함수
        self.btn_printPlainTextEdit.clicked.connect(self.printPlainTextEdit)
        self.btn_clearPlainTextEdit.clicked.connect(self.clearPlainTextEdit)
        self.btn_appendPlainText.clicked.connect(self.appendPlainText)

    #PlainTextEdit과 관련된 함수
    def printPlainTextEdit(self) :
        print(self.plaintextedit.toPlainText())

    def clearPlainTextEdit(self) :
        self.plaintextedit.clear()

    def appendPlainText(self) :
        self.plaintextedit.appendPlainText("Append Plain Text")

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 

 

/그림 2b. cmd prompt에서 실행한 plaintextedit.py/

 

.Print Plain Text Edit을 클릭하면 내용을 Print
.Clear Plain Text Edit을 클릭하면 내용을 삭제
.Append Plain Text Edit을 클릭하면 "Append Plain Text"을 추가


3) QComboBox
.ComboBox란 여러 개 목록 중 하나를 선택하는 위젯
.self.ComboBox이름.currentIndexChanged.connect(함수)

.함수: 항목의 반환
 -.currentIndex(): 현재 ComboBox에서 선택된 항목의 Index를 반환
 -.currentText(): 현재 ComboBox에서 선택된 항목의 글자를 반환
 -.count(): ComboBox의 항목이 있는지를 그 개수를 반환합니다.
 -.itemText(index)    Index번째에 어떤 항목이 있는지 그 글자를 반환합니다. Parameter로 찾을 항목의 Index를 입력받습니다.

.함수: 항목의 추가 및 삭제
 -.addItem(String): ComboBox의 맨 뒤에 항목 추가
 -.insertItem(index, String): Index번째에 String이라는 항목을 추가
 -.removeItem(index): index번째의 항목을 삭제
 -.clear(): ComboBox의 모든 항목을 삭제

Ex) combobox.ui, combobox.py
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("combobox.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #프로그램 실행 시 두개의 ComboBox를 동기화시키는 코드
        self.syncComboBox()

        #ComboBox에 기능 연결
        self.cmb.currentIndexChanged.connect(self.comboBoxFunction)

        #버튼 vs 함수
        self.btn_printItem.clicked.connect(self.printComboBoxItem)
        self.btn_clearItem.clicked.connect(self.clearComboBoxItem)
        self.btn_addItem.clicked.connect(self.addComboBoxItem)
        self.btn_deleteItem.clicked.connect(self.deleteComboBoxItem)

    def syncComboBox(self) :
        for i in range(0,self.cmb.count()) :
            self.cmb_second.addItem(self.cmb.itemText(i))

    def comboBoxFunction(self) :
        self.lbl_display.setText(self.cmb.currentText())

    def clearComboBoxItem(self) :
        self.cmb.clear()
        self.cmb_second.clear()

    def printComboBoxItem(self) :
        print(self.cmb_second.currentText())

    def addComboBoxItem(self) :
        self.cmb.addItem(self.lineedit_addItem.text())
        self.cmb_second.addItem(self.lineedit_addItem.text())
        print("Item Added")

    def deleteComboBoxItem(self) :
        self.delidx = self.cmb_second.currentIndex()
        self.cmb.removeItem(self.delidx)
        self.cmb_second.removeItem(self.delidx)
        print("Item Deleted")

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 

 

/그림 3. cmd prompt에서 실행한 combobox.py/

 

.ComboBox에서 항목을 선택하면 ComboBox 위에 있는 label에 항목의 이름이 표시됨 
.PrintItem을 누르면 ComboBox에서 선택된 항목이 Print됨
.ClearItem버튼을 누르면 ComboBox의 목록이 삭제됨

.중간에 있는 LineEdit에 글자를 쓰고 AddItem 버튼을 누르면 ComboBox에 항목이 추가됨
.맨 밑 ComboBox에서 항목을 선택한 후, DeleteItem을 클릭하면 해당 항목이 목록에서 삭제됨


4) QSpinBox, QDoubleSpinBox
.SpinBox란 버튼을 이용하여 상자 안의 숫자의 크기를 조절할 수 있는 위젯
.두 종류의 SpinBox: QSpinBox는 정수값을, QDoubleSpinBox는 실수값을 가짐

.self.SpinBox/DoubleSpinBox이름.valueChanged.connect(함수)

.함수: 현재 상태의 반환
 -.value(): 현재 SpinBox에 있는 값을 반환
 -.minimum(): 현재 SpinBox의 최솟값을 반환
 -.maximum(): 현재 SpinBox의 최댓값을 반환
 -.singleStep(): 현재 SpinBox의 singleStep의 크기를 반환

.함수: 현재 상태의 변경
.setRange(min,max): SpinBox의 최댓값/최솟값을 변경
.setStep(Value): SpinBox의 Step크기를 변경

Ex) spinbox.ui, spinbox.py
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("spinbox.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        self.spinbox.valueChanged.connect(self.printValue)
        self.btn_showInfo.clicked.connect(self.printInfo)
        self.btn_changeRangeStep.clicked.connect(self.changeRangeStep)

        self.doublespinbox.valueChanged.connect(self.printDoubleValue)
        self.btn_doubleShowInfo.clicked.connect(self.printDoubleInfo)
        self.btn_doubleChangeRangeStep.clicked.connect(self.doubleChangeRangeStep)


    def printValue(self) :
        print(self.spinbox.value())
    
    def printInfo(self) :
        print("Maximum value is",self.spinbox.maximum())
        print("Minimum value is",self.spinbox.minimum())
        print("Step Size is",self.spinbox.singleStep())

    def changeRangeStep(self) :
        self.spinbox.setRange(0,1000)
        self.spinbox.setSingleStep(10)

    def printDoubleValue(self) :
        print(self.doublespinbox.value())

    def printDoubleInfo(self) :
        print("Maximum value is",self.doublespinbox.maximum())
        print("Minimum value is",self.doublespinbox.minimum())
        print("Step Size is",self.doublespinbox.singleStep())
    
    def doubleChangeRangeStep(self) :
        self.doublespinbox.setRange(0,1000)
        self.doublespinbox.setSingleStep(1.5)

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 

 

/그림 4. cmd prompt에서 실행한 spinbox.py/

 

.SpinBox의 값을 바꾸면 SpinBox안에 있는 값이 Print됨
.ShowInfo를 클릭하면 현재 SpinBox의 최댓값, 최솟값, SingleStep값을 print
.Change를 클릭하면 SpinBox의 값을 범위를 바꾸고, SingleStep의 값을 변경

 

5) QSlider, QDial
.QSlider란 바(bar)를 움직여 값을 조절할 수 있는 위젯
.QDial이란 QSlider를 다이얼의 형태로 바꿔놓은 것
.QSlider와 QDial이 동일한 코드로 작동됨

.시그널
 -self.Slider/Dial이름.sliderMoved.connect(함수)
 -self.Slider/Dial이름.valueChanged.connect(함수)
 -self.Slider/Dial이름.rangeChanged.connect(함수)

.함수: 현재 상태의 반환
 -.value(): Slider 혹은 Dial의 현재값을 반환
 -.minimum(): Slider 혹은 Dial의 최솟값을 반환
 -.maximum(): Slider 혹은 Dial의 최댓값을 반환
 -.singleStep(): Slider 혹은 Dial의 singleStep의 크기를 반환
 -.pageStep(): Slider 혹은 Dial의 pageStep의 크기를 반환

.함수: 현재 상태의 변경
 -.setMaximum(Max): Slider, Dial의 최댓값을 설정
 -.setMinimum(Min): Slider, Dial의 최솟값을 설정
 -.setSingleStep(Value): Slider, Dial의 SingleStep의 크기를 설정
 -.setPageStep(Value): Slider, Dial의 PageStep을 설정
 -.setRange(Max,Min): Slider, Dial의 범위를 변경
 -.setValue(Value): Slider, Dial의 값을 설정

Ex) sliderDial.ui, sliderDial.py
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("sliderDial.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #Vertical Slider의 시그널 사용
        self.slider_vertical.valueChanged.connect(self.showVerticalSliderValue)
        self.slider_vertical.rangeChanged.connect(self.printRangeChanged)

        #Horizontal Slider의 시그널 사용
        self.slider_horizontal.valueChanged.connect(self.showHorizontalSliderValue)
        self.slider_horizontal.rangeChanged.connect(self.printRangeChanged)

        #Dial의 시그널 사용
        self.dial.valueChanged.connect(self.showDialValue)
        self.dial.rangeChanged.connect(self.printRangeChanged)

        #버튼에 기능 연결
        self.btn_vInfo.clicked.connect(self.getVerticalInfo)
        self.btn_vValue.clicked.connect(self.setVertical)
        self.btn_hInfo.clicked.connect(self.getHorizontalInfo)
        self.btn_hValue.clicked.connect(self.setHorizontal)
        self.btn_dInfo.clicked.connect(self.getDialInfo)
        self.btn_dValue.clicked.connect(self.setDial)


    def printRangeChanged(self) :
        print("Range Changed")

    #Vertical Slider에 관련된 함수들

    def showVerticalSliderValue(self) :
        #Vertical Slider의 시그널 이용 - Vertical Slider의 값이 변경되면 Label에 값을 표시
        self.lbl_vertical.setText(str(self.slider_vertical.value()))

    def getVerticalInfo(self) :
        #Vertical Slider의 최대/최솟값과 PageStep/SingleStep값을 출력
        print("Maximum : " + str(self.slider_vertical.maximum()))
        print("Minimum : " + str(self.slider_vertical.minimum()))
        print("PageStep : " + str(self.slider_vertical.pageStep()))
        print("SingleStep : " + str(self.slider_vertical.singleStep()))

    def setVertical(self) :
        #Vertical Slider의 최대/최솟값과 PageStep/SingleStep값을 변경
        self.slider_vertical.setMaximum(500)
        self.slider_vertical.setMinimum(-500)
        self.slider_vertical.setPageStep(100)
        self.slider_vertical.setSingleStep(20)


    #Horizontal Slider에 관련된 함수들
    
    def showHorizontalSliderValue(self) :
        #Horizontal Slider의 시그널 이용 - Horizontal Slider의 값이 변경되면 Label에 값을 표시
        self.lbl_horizontal.setText(str(self.slider_horizontal.value()))

    def getHorizontalInfo(self) :
        #Horizontal Slider의 최대/최솟값과 PageStep/SingleStep값을 출력
        print("Maximum : " + str(self.slider_horizontal.maximum()))
        print("Minimum : " + str(self.slider_horizontal.minimum()))
        print("PageStep : " + str(self.slider_horizontal.pageStep()))
        print("SingleStep : " + str(self.slider_horizontal.singleStep()))

    def setHorizontal(self) :
        #Horizontal Slider의 최대/최솟값과 PageStep/SingleStep값을 변경
        self.slider_horizontal.setMaximum(500)
        self.slider_horizontal.setMinimum(-500)
        self.slider_horizontal.setPageStep(100)
        self.slider_horizontal.setSingleStep(20)

    #Dial에 관련된 함수들
    def showDialValue(self) :
        #Dial의 시그널 이용 - Dial의 값이 변경되면 Label에 값을 표시
        self.lbl_dial.setText(str(self.dial.value()))

    def getDialInfo(self) :
        #Dial의 최대/최솟값과 PageStep/SingleStep값을 출력합니다.
        print("Maximum : " + str(self.dial.maximum()))
        print("Minimum : " + str(self.dial.minimum()))
        print("PageStep : " + str(self.dial.pageStep()))
        print("SingleStep : " + str(self.dial.singleStep()))

    def setDial(self) :
        #Dial의 최대/최솟값과 PageStep/SingleStep값을 변경
        self.dial.setMaximum(500)
        self.dial.setMinimum(-500)
        self.dial.setPageStep(100)
        self.dial.setSingleStep(20)


if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 

 

/그림 5. cmd prompt에서 실행한 sliderDial.py/

 

.Slider, Dial을 움직이면 Label에 Slider와 Dial의 값을 나타낸다.
.V_Info, H_Info, D_Info을 클릭하면 Slider와 Dial의 최댓값/최솟값, PageStep, SingleStep값을 출력한다.
.V_Range, H_Range, D_Rang을 클릭하면 Slider와 Dial의 최댓값/최솟값, PageStep, SingleStep의 값을 변경한다.


6) QDateTimeEdit
.QDateTimeEdit란 날짜, 시간을 설정할 수 있는 위젯

.시그널
 -self.DateTimeEdit이름.dateTimeChanged.connect(함수)
 -self.DateTimeEdit이름.dateChanged.connect(함수)
 -self.DateTimeEdit이름.timeChanged.connect(함수)

.함수: 현재 상태의 반환
 -.dateTime(): QDateTimeEdit의 날짜, 시간값을 반환
 -.date(): QDateTimeEdit의 날짜값을 반환
 -.time(): QDateTimeEdit의 시간값을 반환
 -.maximumDateTime(): QDateTimeEdit의 날짜/시간값의 최댓값을 반환
 -.maximumDate(): QDateTimeEdit의 날짜값의 최댓값을 반환
 -.maximumTime(): QDateTimeEdit의 시간값의 최댓값을 반환
 -.minimumDateTime(): QDateTimeEdit의 날짜/시간값의 최솟값을 반환
 -.minimumDate(): QDateTimeEdit의 날짜값의 최솟값을 반환
 -.minimumTime(): QDateTimeEdit의 시간값의 최솟값을 반환

.함수: 현재 상태의 변경
 -.setDateTime(QDateTime): QDateTimeEdit의 날짜/시간값을 설정
 -.setDate(QDate): QDateTimeEdit의 날짜값을 반환
 -.setTime(QTime): QDateTimeEdit의 시간값을 반환

.함수: 입력/표시 형식
 -.calendarPopup(): QDateTimeEdit의 CalendarPopup이 속성이 참인지, 거짓인지를 반환
 -.setCalendarPopup(bool): QDateTimeEdit의 CalendarPopup 속성을 변경
 -.setDisplayFormat(Format Text): QDateTimeEdit이 어떤 형식으로 날짜와 시간을 보여줄지를 설정

.함수: 날짜/시간의 최대/최소
 -.setDateTimeRange(min, max): QDateTimeEdit의 날짜/시간 범위를 설정
 -.setDateRange(min, max): QDateTimeEdit의 날짜 범위를 설정
 -.setTimeRange(min, max): QDateTimeEdit의 시간 범위를 설정
 -.setMaximumDateTime(max): QDateTimeEdit의 날짜/시간값의 최댓값을 설정
 -.setMaximumDate(max): QDateTimeEdit의 날짜값의 최댓값을 설정
 -.setMaximumTime(max): QDateTimeEdit의 시간값의 최댓값을 설정
 -.setMinimumDateTime(min): QDateTimeEdit의 날짜/시간값의 최솟값을 설정
 -.setMinimumDate(min): QDateTimeEdit의 날짜값의 최솟값을 설정
 -.setMinimumTime(min): QDateTimeEdit의 시간값의 최솟값을 설정
 -.clearMaximumDateTime(): QDateTimeEdit의 날짜/시간값의 최댓값을 기본값으로 변경
 -.clearMaximumDate(): QDateTimeEdit의 날짜값의 최댓값을 기본값으로 변경
 -.clearMaximumTime(): QDateTimeEdit의 시간값의 최댓값을 기본값으로 변경
 -.clearMinimumDateTime(): QDateTimeEdit의 날짜/시간값의 최솟값을 기본값으로 변경
 -.clearMinimumDate(): QDateTimeEdit의 날짜값의 최솟값을 기본값으로 변경
 -.clearMinimumTime(): QDateTimeEdit의 시간값의 최솟값을 기본값으로 변경

Ex) dateTimeEdit.ui, dateTimeEdit.py
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("sliderDial.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #Vertical Slider의 시그널 사용
        self.slider_vertical.valueChanged.connect(self.showVerticalSliderValue)
        self.slider_vertical.rangeChanged.connect(self.printRangeChanged)

        #Horizontal Slider의 시그널 사용
        self.slider_horizontal.valueChanged.connect(self.showHorizontalSliderValue)
        self.slider_horizontal.rangeChanged.connect(self.printRangeChanged)

        #Dial의 시그널 사용
        self.dial.valueChanged.connect(self.showDialValue)
        self.dial.rangeChanged.connect(self.printRangeChanged)

        #버튼에 기능 연결
        self.btn_vInfo.clicked.connect(self.getVerticalInfo)
        self.btn_vValue.clicked.connect(self.setVertical)
        self.btn_hInfo.clicked.connect(self.getHorizontalInfo)
        self.btn_hValue.clicked.connect(self.setHorizontal)
        self.btn_dInfo.clicked.connect(self.getDialInfo)
        self.btn_dValue.clicked.connect(self.setDial)


    def printRangeChanged(self) :
        print("Range Changed")

    #Vertical Slider에 관련된 함수들

    def showVerticalSliderValue(self) :
        #Vertical Slider의 시그널 이용 - Vertical Slider의 값이 변경되면 Label에 값을 표시
        self.lbl_vertical.setText(str(self.slider_vertical.value()))

    def getVerticalInfo(self) :
        #Vertical Slider의 최대/최솟값과 PageStep/SingleStep값을 출력
        print("Maximum : " + str(self.slider_vertical.maximum()))
        print("Minimum : " + str(self.slider_vertical.minimum()))
        print("PageStep : " + str(self.slider_vertical.pageStep()))
        print("SingleStep : " + str(self.slider_vertical.singleStep()))

    def setVertical(self) :
        #Vertical Slider의 최대/최솟값과 PageStep/SingleStep값을 변경
        self.slider_vertical.setMaximum(500)
        self.slider_vertical.setMinimum(-500)
        self.slider_vertical.setPageStep(100)
        self.slider_vertical.setSingleStep(20)


    #Horizontal Slider에 관련된 함수들
    
    def showHorizontalSliderValue(self) :
        #Horizontal Slider의 시그널 이용 - Horizontal Slider의 값이 변경되면 Label에 값을 표시
        self.lbl_horizontal.setText(str(self.slider_horizontal.value()))

    def getHorizontalInfo(self) :
        #Horizontal Slider의 최대/최솟값과 PageStep/SingleStep값을 출력
        print("Maximum : " + str(self.slider_horizontal.maximum()))
        print("Minimum : " + str(self.slider_horizontal.minimum()))
        print("PageStep : " + str(self.slider_horizontal.pageStep()))
        print("SingleStep : " + str(self.slider_horizontal.singleStep()))

    def setHorizontal(self) :
        #Horizontal Slider의 최대/최솟값과 PageStep/SingleStep값을 변경
        self.slider_horizontal.setMaximum(500)
        self.slider_horizontal.setMinimum(-500)
        self.slider_horizontal.setPageStep(100)
        self.slider_horizontal.setSingleStep(20)

    #Dial에 관련된 함수들
    def showDialValue(self) :
        #Dial의 시그널 이용 - Dial의 값이 변경되면 Label에 값을 표시
        self.lbl_dial.setText(str(self.dial.value()))

    def getDialInfo(self) :
        #Dial의 최대/최솟값과 PageStep/SingleStep값을 출력합니다.
        print("Maximum : " + str(self.dial.maximum()))
        print("Minimum : " + str(self.dial.minimum()))
        print("PageStep : " + str(self.dial.pageStep()))
        print("SingleStep : " + str(self.dial.singleStep()))

    def setDial(self) :
        #Dial의 최대/최솟값과 PageStep/SingleStep값을 변경
        self.dial.setMaximum(500)
        self.dial.setMinimum(-500)
        self.dial.setPageStep(100)
        self.dial.setSingleStep(20)


if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 
 

/그림 6. cmd prompt에서 실행한 dateTimeEdit.py/


.프로그램이 실행되면 QDateTimeEdit의 값이 현재 날짜/시간을 초기화
.DisplayInfo를 클릭하면 왼쪽 Label에 날짜/시간, 날짜, 시간이 표시
.DateTime의 LineEdit에 날짜/시간을 쓰고 DateTime을 클릭하여 DateTimeEdit의 날짜/시간값 변경
.Date의 LineEdit에 날짜를 쓰고 Date을 클릭하여 DateTimeEdit의 날짜값 변경
.Time의 LineEdit에 시간을 쓰고 Time을 클릭하여 DateTimeEdit의 시간값 변경
.DisplayFormat의 LineEdit에 형식(예: dd/MM/yyyy h:m:s ap) 입력하여 ChangeFormat을 클릭하여 DateTimeEdit의 형식 변경
.ShowRange을 클릭하여 DateTimeEdit의 최대/최소 DateTime을 출력
.Edit Maximum을 클릭하면 DateTimeEdit의 최댓값이 10일 연장
.Edit Minimum을 클릭하면 DateTimeEdit의 최솟값이 10일 연장


7) QDateEdit, QTimeEdit
.QDateTimeEdit란 날짜, 시간을 설정할 수 있는 위젯
.QTimeEdit란 시간을 설정할 수 있는 위젯

.시그널
 -self.DateEdit이름.dateChanged.connect(함수)
 -self.TimeEdit이름.timeChanged.connect(함수)

.함수: 현재 상태의 반환
 -.date(): QDateEdit의 날짜값 반환
 -.maximumDate(): QDateEdit의 날짜값의 최댓값을 반환
 -.minimumDate(): QDateEdit의 날짜값의 최솟값을 반환

.함수: QDateEdit의 값과 입력/표시형식
 -.setDate(QDate): QDateEdit의 날짜값을 셋팅
 -.calendarPopup(): QDateEdit의 CalendarPopup이 속성이 참인지, 거짓인지를 반환
 -.setCalendarPopup(bool): QDateEdit의 CalendarPopup 속성 변경
 -.setDisplayFormat(Format Text): QDateEdit의 날짜와 시간의 형식 설정

.함수: QDateEdit의 최대/최소 
 -.setDateRange(min, max): QDateEdit의 날짜 범위 설정
 -.setMaximumDate(max): QDateEdit의 날짜값의 최댓값 설정
 -.setMinimumDate(min): QDateEdit의 날짜값의 최솟값 설정
 -.clearMaximumDate(): QDateEdit의 날짜값의 최댓값을 기본값으로 변경
 -.clearMinimumDate(): QDateEdit의 날짜값의 최솟값을 기본값으로 변경

.함수: QTimeEdit
 -.time(): QTimeEdit의 시간값을 반환
 -.maximumTime(): QTimeEdit의 시간값의 최댓값을 반환
 -.minimumTime(): QTimeEdit의 시간값의 최솟값을 반환

.함수: QDateEdit의 값과 표시형식
 -.setTimeRange(min, max): QTimeEdit의 시간 범위를 설정
 -.setMaximumTime(max): QTimeEdit의 시간값의 최댓값을 설정
 -.setMinimumTime(min): QTimeEdit의 시간값의 최솟값을 설정
 -.clearMaximumTime(): QTimeEdit의 시간값의 최댓값을 기본값으로 변경
 -.clearMinimumTime(): QTimeEdit의 시간값의 최솟값을 기본값으로 변경


Ex) dateEdit.ui, dateEdit.py
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("dateEdit.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #프로그램이 실행되면 DateEdit의 값이 현재 날짜/시간으로 설정되게 하기
        self.currentDate = QDate.currentDate()
        self.dateEdit.setDate(self.currentDate)

        #버튼 vs 함수
        self.btn_displayDate.clicked.connect(self.displayDate)
        self.btn_enterDate.clicked.connect(self.enterDateFunc)
        self.btn_changeFormat.clicked.connect(self.changeDisplayFormat)
        self.btn_showRange.clicked.connect(self.showRangeFunc)
        self.btn_editMaximum.clicked.connect(self.extendMaximum)
        self.btn_editMinimum.clicked.connect(self.extendMinimum)

    def displayDate(self) :
        self.displayDateVar = self.dateEdit.date()
        self.lbl_displayDate.setText(self.displayDateVar.toString("yyyy-MM-dd"))

    def enterDateFunc(self) :
        #LineEdit에서 글자를 가져온 후, fromString 함수를 이용해서 QDate객체를 생성
        #그 후, setDate 함수를 이용해 DateEdit에 적용
        self.enterDateText = self.line_date.text()
        self.enterDateVar = QDate.fromString(self.enterDateText, "yyyy-MM-dd")
        self.dateEdit.setDate(self.enterDateVar)
    
    def changeDisplayFormat(self) :
        #LineEdit에서 글자를 가져온 후, 그 글자를 DateEdit의 형식문자로 지정
        self.displayFormatText = self.line_displayFormat.text()
        self.dateEdit.setDisplayFormat(self.displayFormatText)

    def showRangeFunc(self) :
        print(self.dateEdit.minimumDate())
        print(self.dateEdit.maximumDate())

    def extendMaximum(self) :
        #DateEdit의 현재 maximumDate을 가져옴
        #그 후 addDays 함수를 이용하여 최댓값을 10일 연장시킨 후, setMaximumDate을 이용하여 DateEdit에 적용
        self.currentMaximumDate = self.dateEdit.maximumDate()
        self.currentMaximumDate = self.currentMaximumDate.addDays(10)
        self.dateEdit.setMaximumDate(self.currentMaximumDate)

    def extendMinimum(self) :
        #DateEdit의 현재 minimumDate을 가져옴
        #그 후 addDays 함수를 이용하여 최솟값을 10일 뒤로 미룬 후, setMinimumDate을 이용하여 DateEdit에 적용
        self.currentMinimumDate = self.dateEdit.minimumDate()
        self.currentMinimumDate = self.currentMinimumDate.addDays(-10)
        self.dateEdit.setMinimumDate(self.currentMinimumDate)


if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 

 

/그림 7a. cmd prompt에서 실행한 dateEdit.py/

 


Ex) timeEdit.ui, timeEdit.py
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5 import uic
import sys

form_class = uic.loadUiType("TimeEdit.ui")[0]

class WindowClass(QMainWindow, form_class) :
    def __init__(self) :
        super().__init__()
        self.setupUi(self)

        #프로그램이 실행되면 TimeEdit의 값이 현재 날짜/시간으로 설정되게 하기
        self.currentTime = QTime.currentTime()
        self.timeEdit.setTime(self.currentTime)

        #버튼 vs 함수
        self.btn_displayTime.clicked.connect(self.displayTime)
        self.btn_enterTime.clicked.connect(self.enterTimeFunc)
        self.btn_changeFormat.clicked.connect(self.changeDisplayFormat)

    def displayTime(self) :
        self.displayTimeVar = self.timeEdit.time()
        self.lbl_displayTime.setText(self.displayTimeVar.toString("AP hh:mm:ss"))

    def enterTimeFunc(self) :
        #LineEdit에서 글자를 가져온 후, fromString 함수를 이용해서 QTime객체를 생성
        #그 후, setTime 함수를 이용해 TimeEdit에 적용
        self.enterTimeText = self.line_time.text()
        self.enterTimeVar = QTime.fromString(self.enterTimeText, "AP hh:mm:ss")
        self.timeEdit.setTime(self.enterTimeVar)
    
    def changeDisplayFormat(self) :
        #LineEdit에서 글자를 가져온 후, 그 글자를 TimeEdit의 형식문자로 지정
        self.displayFormatText = self.line_displayFormat.text()
        self.timeEdit.setDisplayFormat(self.displayFormatText)

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_() 

 

/그림 7b. cmd prompt에서 실행한 timeEdit.py/