초보자를 위한 Python GUI 프로그래밍 - PyQt5

https://wikidocs.net/book/2944

https://freeprog.tistory.com/330?category=716617

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\Library\bin\designer.exe

C:\ProgramData\Anaconda3\Library\bin\designer.exe

 #设置为 32 位
set CONDA_FORCE_32BIT=1 #创建 32位 python3
conda create -n py3-32 python=3 #激活 环境
activate py3-32 pip install PyQt5 pip install jupyter notebook 要是要改成64位 后面没有1
set CONDA_FORCE_32BIT=
 import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic #UI파일 연결
#단, UI파일은 Python 코드 파일과 같은 디렉토리에 위치해야한다.
form_class = uic.loadUiType("UI파일이름.ui")[0] #화면을 띄우는데 사용되는 Class 선언
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self)
"""
---------------------------------------------
이 부분에 시그널을 입력해야 합니다.
시그널이 작동할 때 실행될 기능은 보통 이 클래스의 멤버함수로 작성합니다.
---------------------------------------------
""" if __name__ == "__main__" :
app = QApplication(sys.argv) #QApplication : 프로그램을 실행시켜주는 클래스
myWindow = WindowClass() #WindowClass의 인스턴스 생성
myWindow.show()#프로그램 화면을 보여주는 코드
app.exec_()#프로그램을 이벤트루프로 진입시키는(프로그램을 작동시키는) 코드 """
모든 함수의 앞에는 self.ObjectName이 들어가야 합니다.
.move(x,y)=>위젯의 위치를 지정합니다. Parameter에는 이동할 위치의 x,y좌표가 들어갑니다.
.resize(width,height)=>위젯의 크기를 지정합니다. Parameter에는 위젯의 가로,세로 크기가 들어갑니다.
.text()=>위젯에 쓰여있는 글자를 가져옵니다.
.setText(String)=>위젯에 새롭게 글자를 작성합니다. Parameter에는 표시할 글자가 들어갑니다.
"""

pushButton

 import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic #UI파일 연결
#단, UI파일은 Python 코드 파일과 같은 디렉토리에 위치해야한다.
form_class = uic.loadUiType("L001.PushButton.ui")[0] #화면을 띄우는데 사용되는 Class 선언
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #버튼에 기능을 연결하는 코드
#self.버튼이름.clicked.connect(함수)
self.pushButton_1.clicked.connect(self.button1Function)
self.pushButton_2.clicked.connect(self.button2Function) #btn_1이 눌리면 작동할 함수
def button1Function(self) :
print("btn_1 Clicked") #btn_2가 눌리면 작동할 함수
def button2Function(self) :
print("btn_2 Clicked") if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

 import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic form_class = uic.loadUiType("L002.radioButton.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #GroupBox안에 있는 RadioButton들을 연결합니다.
#GroupBox의 자세한 설명은 02.14 GroupBox를 참고하세요.
#self.Radio버튼이름.clicked.connect(함수)
self.radioButton.clicked.connect(self.groupboxRadFunction)
self.radioButton_2.clicked.connect(self.groupboxRadFunction)
self.radioButton_3.clicked.connect(self.groupboxRadFunction) def groupboxRadFunction(self) :
if self.radioButton.isChecked() : print("GroupBox_rad1 Chekced")
elif self.radioButton_2.isChecked() : print("GroupBox_rad2 Checked")
elif self.radioButton_3.isChecked() : print("GroupBox_rad3 Checked") if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

checkBox

 import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic form_class = uic.loadUiType("L003.checkBox.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #GroupBox안에 있는 CheckBox에 기능 연결
self.checkBox.stateChanged.connect(self.groupchkFunction)
self.checkBox_2.stateChanged.connect(self.groupchkFunction) #GroupBox밖에 있는 CheckBox에 기능 연결
self.checkBox_3.stateChanged.connect(self.chkFunction)
self.checkBox_4.stateChanged.connect(self.chkFunction) def groupchkFunction(self) :
if self.checkBox.isChecked() : print("groupchk_1 isChecked")
if self.checkBox_2.isChecked() : print("groupchk_2 isChecked") def chkFunction(self) :
#CheckBox는 여러개가 선택될 수 있기 때문에 elif를 사용하지 않습니다.
if self.checkBox_3.isChecked() : print("chk_3 isChecked")
if self.checkBox_4.isChecked() : print("chk_4 isChecked") if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

Label

 import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic #UI파일 연결
#단, UI파일은 Python 코드 파일과 같은 디렉토리에 위치해야한다.
form_class = uic.loadUiType("L004.Label")[0] #화면을 띄우는데 사용되는 Class 선언
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #버튼에 기능을 연결하는 코드
self.btn_clean.clicked.connect(self.fun_label_clean)
self.btn_get.clicked.connect(self.fun_label_get)
self.btn_set.clicked.connect(self.fun_label_set) def fun_label_clean(self) :
self.label.clear() #清理文本 def fun_label_get(self) :
print(self.label.text()) #获取文本 def fun_label_set(self) :
self.label.setText("String") #设置文本 if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

TextBrowser

 import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic #UI파일 연결
#단, UI파일은 Python 코드 파일과 같은 디렉토리에 위치해야한다.
form_class = uic.loadUiType("L005.TextBrowser.ui")[0] #화면을 띄우는데 사용되는 Class 선언
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #버튼에 기능을 연결하는 코드
self.btn_clear.clicked.connect(self.fun_textBrowser_clear)
self.btn_get.clicked.connect(self.fun_textBrowser_get)
self.btn_set.clicked.connect(self.fun_textBrowser_set)
self.btn_append.clicked.connect(self.fun_textBrowser_append) def fun_textBrowser_clear(self) :
self.textBrowser.clear() #清理文本 def fun_textBrowser_get(self) :
print(self.textBrowser.toPlainText()) #获取文本 def fun_textBrowser_set(self) :
self.textBrowser.setPlainText("set") #设置文本 def fun_textBrowser_append(self) :
self.textBrowser.append("append") #追加文本 if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

lineEdit

 import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic form_class = uic.loadUiType("L006.LineEdit.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #버튼에 기능을 할당하는 코드
#LineEdit의 글자가 바뀔 때 기능 실행
#self.LineEdit이름.textChanged.connect(함수) #LineEdit에서 Return키(Enter키)가 눌렸을 때 기능 실행
#self.LineEdit이름.returnPressed.connect(함수)
self.lineEdit.textChanged.connect(self.fun_textChanged)
self.lineEdit.returnPressed.connect(self.fun_returnPressed)
self.btn_set.clicked.connect(self.fun_set)
self.btn_get.clicked.connect(self.fun_get) def fun_textChanged(self) :
print("textChanged") def fun_returnPressed(self) :
print("fun_returnPressed") def fun_set(self) :
#self.lineedit이름.setText("String")
#Lineedit의 글자를 바꾸는 메서드
self.lineEdit.setText("Change Text") def fun_get(self) :
#self.lineedit이름.text()
#Lineedit에 있는 글자를 가져오는 메서드
print(self.lineEdit.text()) if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

TextEdit

 """
TextEdit의 주요 함수
.toPlainText()=>PlainTextEdit에 쓰여있는 글자를 가져옵니다.
.setPlainText(String)=>PlainTextEdit에 글을 새로 입력합니다. Parameter에는 PlainTextEdit에 표시할 글자가 들어갑니다.
.appendPlainText(String)=>PlainTextEdit에 글자를 추가합니다. 추가된 글자는 다음줄에 표시되며, Parameter에는 추가할 글자가 들어갑니다.
.clear()=>PlainTextEdit에 쓰여있는 글자를 지웁니다. TextEdit 글자의 입력, 가져오기에 관한 함수
.toPlainText()=>TextEdit에 쓰여있는 글자를 가져옵니다.
.setPlainText(String)=>TextEdit에 PlainText 형식의 글을 새로 입력합니다. Parameter에는 TextEdit에 표시할 글자가 들어갑니다.
.setText(String)=>TextEdit에 RichText 형식의 글을 입력합니다. Parameter에는 TextEdit에 표시할 글자가 들어갑니다.
.append(String)=>TextEdit에 글자를 추가합니다. 추가된 글자는 다음줄에 표시되며, Parameter에는 추가할 글자가 들어갑니다.
.clear()=>TextEdit에 쓰여있는 글자를 지웁니다. TextEdit 글자의 모양에 관련된 함수
.setCurrentFont(QFont)=>TextEdit의 폰트를 바꿉니다. Parameter에는 QFont형식의 객체가 들어갑니다.
.setTextColor(QColor)=>TextEdit의 글자색을 바꿉니다. Parameter에는 QColor형식의 객체가 들어갑니다.
.setFontItalic(Boolean)=>TextEdit에 쓰여있는 글자를 기울입니다. Parameter에는 True/False값이 들어가며, True일 때 글자가 기울여집니다.
.setFontUnderline(Boolean)=>TextEdit의 글자에 밑줄을 적용합니다. Parameter에는 True/False값이 들어가며, True일 때 글자에 밑줄이 쳐집니다.
.setFontPointSize(size)=>TextEdit의 글자 크기를 변경합니다. Parameter에는 글자의 크기(숫자)가 들어갑니다. QFont
from PyQt5.QtGui import *
fontVar = QFont(FontName)
fontVar = QFont(FontName, Size) .toPlainText()=>PlainTextEdit에 쓰여있는 글자를 가져옵니다.
.setPlainText(String)=>PlainTextEdit에 글을 새로 입력합니다. Parameter에는 PlainTextEdit에 표시할 글자가 들어갑니다.
.appendPlainText(String)=>PlainTextEdit에 글자를 추가합니다. 추가된 글자는 다음줄에 표시되며, Parameter에는 추가할 글자가 들어갑니다.
.clear()=>PlainTextEdit에 쓰여있는 글자를 지웁니다. QColor
from PyQt5.QtGui import *
colorVar = QColor(Red, Green, Blue, Alpha) colorVar=>QColor의 객체이름을 의미합니다.
Red=>RGB 색상 중 Red값을 의미하며, 0부터 255사이의 정수가 들어갑니다. 값이 클 수록 빨강이 진하게 보여집니다.
Green=>RGB색상 중 Green값을 의미하며, 0부터 255사이의 정수가 들어갑니다. 값이 클 수록 초록이 진하게 보여집니다.
Blue=>RGB색상 중 Blue값을 의미하며, 0부터 255사이의 정수가 들어갑니다. 값이 클 수록 파랑이 진하게 보여집니다.
Alpha=>투명도를 의미하는 값으로 0부터 255사이의 정수가 들어갑니다. 기본값인:255 255:불투명, 0:투명 """
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import uic form_class = uic.loadUiType("L007.TextEdit.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self)
self.fontSize = 10 #TextEdit과 관련된 버튼에 기능 연결
self.btn_get.clicked.connect(self.fun_text_get)
self.btn_clear.clicked.connect(self.fun_text_clear)
self.btn_Italic.clicked.connect(self.fun_Italic)
self.btn_ColorRed.clicked.connect(self.fun_ColorRed)
self.btn_setFont.clicked.connect(self.fun_setFont)
self.btn_font_sizeup.clicked.connect(self.fun_font_sizeup)
self.btn_font_sizedown.clicked.connect(self.fun_font_sizedown) def fun_text_get(self) :
print(self.textEdit.toPlainText())#获取文本内容 def fun_text_clear(self) :
self.textEdit.clear()#清数据 def fun_setFont(self) :
fontvar = QFont("Apple SD Gothic Neo",10)
self.textEdit.setCurrentFont(fontvar) #设置格式 def fun_Italic(self) :
self.textEdit.setFontItalic(True)#斜体 def fun_ColorRed(self) :
colorvar = QColor(255,0,0)
self.textEdit.setTextColor(colorvar)#改变颜色 def fun_font_sizeup(self) :
self.fontSize = self.fontSize + 1
self.textEdit.setFontPointSize(self.fontSize) #字体变大 def fun_font_sizedown(self) :
self.fontSize = self.fontSize - 1
self.textEdit.setFontPointSize(self.fontSize)#字体变小 if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

comboBox

 #QComboBox
"""
self.ComboBox이름.currentIndexChanged.connect(함수) #信号 获取
.currentIndex()->현재 ComboBox에서 선택된 항목의 Index를 반환합니다.
.currentText()->현재 ComboBox에서 선택된 항목의 글자를 반환합니다.
.count()->ComboBox에 몇개의 항목이 있는지를 그 개수를 반환합니다.
.itemText(index)->Index번째에 어떤 항목이 있는지 그 글자를 반환합니다. Parameter로 찾을 항목의 Index를 입력받습니다. 添加或删除
.addItem(String)->ComboBox의 맨 뒤에 항목을 추가합니다. Parameter로 추가할 항목의 글자를 입력받습니다.
.insertItem(index, String)->Index번째에 String이라는 항목을 추가합니다. Parameter로 항목을 추가할 위치(index)와 글자를 입력받습니다.
.removeItem(index)->index번째의 항목을 삭제합니다. Parameter로 삭제할 항목의 Index를 입력받습니다.
.clear()->ComboBox의 모든 항목을 삭제합니다.
"""
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic form_class = uic.loadUiType("L008.ComboBox.ui")[0] class WindowsClass(QMainWindow,form_class):
def __init__(self):
super().__init__()
self.setupUi(self) #프로그램 실행 시 두개의 ComboBox를 동기화시키는 코드
self.syncComboBox() #ComboBox에 기능 연결
self.comboBox_1.currentIndexChanged.connect(self.comboBoxFunction) #버튼에 기능 연결
self.BTN_GET.clicked.connect(self.ComboBoxItem_Get)
self.BTN_CLR.clicked.connect(self.ComboBoxItem_Clr)
self.BTN_ADD.clicked.connect(self.ComboBoxItem_Add)
self.BTN_DELET.clicked.connect(self.ComboBoxItem_Del) def syncComboBox(self) :
for i in range(0,self.comboBox_1.count()) :
self.comboBox_2.addItem(self.comboBox_1.itemText(i)) #添加数据 def comboBoxFunction(self) :
self.label.setText(self.comboBox_1.currentText())#当前文字显示在label 上 def ComboBoxItem_Add(self) :
self.comboBox_1.addItem(self.lineEdit.text())#获取文本框内数据到comboBox
self.comboBox_2.addItem(self.lineEdit.text())
#self.comboBox_1.insertItem(0,"111")
print("Item Added") def ComboBoxItem_Clr(self) :
self.comboBox_1.clear() #清理combobox 的全部数据
self.comboBox_2.clear() def ComboBoxItem_Get(self) :
print(self.comboBox_1.currentText())#选中comboBox的 内容并打印 def ComboBoxItem_Del(self) :
self.delidx = self.comboBox_2.currentIndex() #获得选中的index
self.comboBox_1.removeItem(self.delidx) #移除
self.comboBox_2.removeItem(self.delidx)
print("Item Deleted") if __name__ == "__main__" :
app=QApplication(sys.argv)
myWindow=WindowsClass()
myWindow.show()
app.exec_()

SpinBox, DoubleSpinBox

 """
SpinBox, DoubleSpinBox
Minumum : 이 SpinBox에서 가질 수 있는 최소값을 의미합니다.
Maximum : 이 SpinBox에서 가질 수 있는 최대값을 의미합니다.
SingleStep : 버튼을 눌렀을 때 숫자가 한번에 얼마나 늘어나고 줄어들지를 지정합니다.
Value : SpinBox에서 값을 조절하지 않았을 때, 기본적으로 보여줄 값을 지정합니다. self.SpinBox/DoubleSpinBox이름.valueChanged.connect(함수) 현재 상태의 반환
.value()->현재 SpinBox에 있는 값을 반환합니다.
.minimum()->현재 SpinBox의 최솟값을 반환합니다.
.maximum()->현재 SpinBox의 최댓값을 반환합니다.
.singleStep()->현재 SpinBox의 singleStep의 크기를 반환합니다. SpinBox의 상태 변경
.setRange(min,max)->SpinBox의 최대,최솟값을 변경합니다.
Parameter로 SpinBox의 새로운 최솟값과 최댓값을 입력받습니다.
QSpinBox에서는 정수값을, QDoubleSpinBox에서는 실수값을 입력할 수 있습니다.
.setSingleStep(Value)->SpinBox의 Step크기를 변경합니다.
Parameter로 새로운 Step의 값을 입력받습니다.
QSpinBox에서는 정수값을, QDoubleSpinBox에서는 실수값을 입력할 수 있습니다. """ import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
form_class = uic.loadUiType("L009.SpinBox_DoubleSpinBox.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) self.spinBox.valueChanged.connect(self.spinBox_Val)
self.BTN1_INFO.clicked.connect(self.spinBox_Info)
self.BTN1_CHAN.clicked.connect(self.spinBox_Change) self.doubleSpinBox.valueChanged.connect(self.doubleSpinBox_Val)
self.BTN2_INFO.clicked.connect(self.doubleSpinBox_Info)
self.BTN2_CHAN.clicked.connect(self.doubleSpinBox_Change) def spinBox_Val(self):
print(self.spinBox.value()) #获取 值 def spinBox_Info(self): #最大值,最小值, 不进
print("Maximum value is",self.spinBox.maximum())
print("Minimum value is",self.spinBox.minimum())
print("Step Size is",self.spinBox.singleStep()) def spinBox_Change(self):
self.spinBox.setRange(0,1000)#设置范围
self.spinBox.setSingleStep(10)#设置不进 def doubleSpinBox_Val(self):
print(self.doubleSpinBox.value()) #获取 值 def doubleSpinBox_Info(self): #最大值,最小值, 不进
print("Maximum value is",self.doubleSpinBox.maximum())
print("Minimum value is",self.doubleSpinBox.minimum())
print("Step Size is",self.doubleSpinBox.singleStep()) def doubleSpinBox_Change(self):
self.doubleSpinBox.setRange(0,100)#设置范围
self.doubleSpinBox.setSingleStep(1.5)#设置不进 if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

Slider,Dial

 """
Slider,Dial
Value : QSlider의 값을 의미합니다.
Minumum : QSlider가 가질 수 있는 가장 작은 값을 의미합니다.
Maximum : Qslider가 가질 수 있는 가장 큰 값을 의미합니다.
SingleStep : Slider를 옮기거나, 방향키를 눌러 이동할 수 있는 최소한의 값을 의미합니다.
PageStep : SingleStep보다는 조금 큰 개념으로 Page Up/Down등의 키를 눌렀을 때 이동할 수 있는 값을 의미합니다. Slider와 Dial의 Slider가 움직였을 때 기능 실행
self.Slider/Dial이름.sliderMoved.connect(함수) Slider와 Dial의 값이 바뀌었을 때 기능 실행
self.Slider/Dial이름.valueChanged.connect(함수) Slider와 Dial의 범위가 바뀌었을 때 기능 실행
self.Slider/Dial이름.rangeChanged.connect(함수) 현재 상태의 반환 str()를 이용하여 String형(문자열)로 바꾼후 사용
.value()->Slider 혹은 Dial의 현재값을 반환합니다.
.minimum()->Slider 혹은 Dial의 최솟값을 반환합니다.
.maximum()->Slider 혹은 Dial의 최댓값을 반환합니다.
.singleStep()->Slider 혹은 Dial의 singleStep의 크기를 반환합니다.
.pageStep()->Slider 혹은 Dial의 pageStep의 크기를 반환합니다. Slider와 Dial의 상태 변경
.setMaximum(Max)->Slider, Dial의 최댓값을 설정합니다. Parameter로 Slider와 Dial의 새로운 최댓값을 입력받습니다.
.setMinimum(Min)->Slider, Dial의 최솟값을 설정합니다. Parameter로 Slider와 Dial의 새로운 최솟값을 입력받습니다.
.setSingleStep(Value)->Slider, Dial의 SingleStep의 크기를 설정합니다. Parameter로 Slider와 Dial의 새로운 SIngleStep의 값을 입력받습니다.
.setPageStep(Value)->Slider, Dial의 PageStep을 설정합니다. Parameter로 Slider와 Dial의 새로운 PageStep을 입력받습니다.
.setRange(Max,Min)->Slider, Dial의 범위를 변경합니다. Parameter로 Slider와 Dial의 새로운 최댓값과 최솟값을 입력받습니다.
.setValue(Value)->Slider, Dial의 값을 설정합니다. Parameter로 Slider와 Dial의 값을 입력받습니다.
""" import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic form_class = uic.loadUiType("L010.Slider_Dial.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #Vertical Slider의 시그널 사용
self.verticalSlider.valueChanged.connect(self.showVerticalSliderValue)
self.verticalSlider.rangeChanged.connect(self.printRangeChanged) #Horizontal Slider의 시그널 사용
self.horizontalSlider.valueChanged.connect(self.showHorizontalSliderValue)
self.horizontalSlider.rangeChanged.connect(self.printRangeChanged) #Dial의 시그널 사용
self.dial.valueChanged.connect(self.showDialValue)#valueChanged 改变值
self.dial.rangeChanged.connect(self.printRangeChanged)#rangeChanged 改变范围 #버튼에 기능 연결
self.btn_v_info.clicked.connect(self.getVerticalInfo)
self.btn_v_range.clicked.connect(self.setVertical)
self.btn_h_info.clicked.connect(self.getHorizontalInfo)
self.btn_h_range.clicked.connect(self.setHorizontal)
self.btn_d_info.clicked.connect(self.getDialInfo)
self.btn_d_range.clicked.connect(self.setDial) def printRangeChanged(self) :
print("Range Changed") #Vertical Slider에 관련된 함수들 def showVerticalSliderValue(self) :
#Vertical Slider의 시그널 이용 - Vertical Slider의 값이 변경되면 Label에 값을 표시
self.label_v_val.setText(str(self.verticalSlider.value())) def getVerticalInfo(self) :
#Vertical Slider의 최대/최솟값과 PageStep/SingleStep값을 출력합니다.
print("Maximum : " + str(self.verticalSlider.maximum()))
print("Minimum : " + str(self.verticalSlider.minimum()))
print("PageStep : " + str(self.verticalSlider.pageStep()))
print("SingleStep : " + str(self.verticalSlider.singleStep())) def setVertical(self) :
#Vertical Slider의 최대/최솟값과 PageStep/SingleStep값을 변경합니다.
self.verticalSlider.setMaximum(500)
self.verticalSlider.setMinimum(-500)
self.verticalSlider.setPageStep(100)
self.verticalSlider.setSingleStep(20) #Horizontal Slider에 관련된 함수들 def showHorizontalSliderValue(self) :
#Horizontal Slider의 시그널 이용 - Horizontal Slider의 값이 변경되면 Label에 값을 표시
self.label_h_val.setText(str(self.horizontalSlider.value())) def getHorizontalInfo(self) :
#Horizontal Slider의 최대/최솟값과 PageStep/SingleStep값을 출력합니다.
print("Maximum : " + str(self.horizontalSlider.maximum()))
print("Minimum : " + str(self.horizontalSlider.minimum()))
print("PageStep : " + str(self.horizontalSlider.pageStep()))
print("SingleStep : " + str(self.horizontalSlider.singleStep())) def setHorizontal(self) :
#Horizontal Slider의 최대/최솟값과 PageStep/SingleStep값을 변경합니다.
self.horizontalSlider.setMaximum(500) #设置最大值
self.horizontalSlider.setMinimum(-500) #设置最小值
self.horizontalSlider.setPageStep(100)
self.horizontalSlider.setSingleStep(20) #一次不进 #Dial에 관련된 함수들
def showDialValue(self) :
#Dial의 시그널 이용 - Dial의 값이 변경되면 Label에 값을 표시
self.label_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_()

DateTimeEdit

 """
DateTimeEdit
DateTimeEdit의 날짜와 시간이 바뀌었을 때 기능 실행
self.DateTimeEdit이름.dateTimeChanged.connect(함수) DateTimeEdit의 날짜가 바뀌었을 때 기능 실행
self.DateTimeEdit이름.dateChanged.connect(함수) DateTimeEdit의 시간이 바뀌었을 때 기능 실행
self.DateTimeEdit이름.timeChanged.connect(함수) 표시예는 [2019-01-14 월요일 오후 8시 7분 6초] 를 표시한다고 가정합니다. 연도->yyyy->연도를 전체 다 표시합니다->2019
월->MM->월을 숫자로 표시합니다->01
월->MMM->월을 영어단어 약자로 표시합니다->Jan
월->MMMM->월을 영어단어로 표시합니다->January
일->dd->일을 숫자로 표시합니다->14
일->ddd->요일을 영어단어 약자로 표시합니다->Mon
일->dddd->요일을 영어단어로 표시합니다->Monday
시간->AP->AM/PM(오전/오후)를 표시합니다->AP사용 - 8 PM, AP미사용 - 20시
시간->h->시간을 표시합니다->8
시간->hh->시간을 표시합니다. 시간이 한자리수 일 경우, 앞에 0을 붙입니다.->08
분->m->분을 표시합니다->7
분->mm->분을 표시합니다. 분이 한자리수 일 경우, 앞에 0을 붙입니다.->07
초->s->초를 표시합니다->6
초->ss->초를 표시합니다. 초가 한자리수 일 경우, 앞에 0을 붙입니다.->06 현재 상태의 반환
.dateTime()->QDateTimeEdit의 날짜, 시간값을 반환합니다. QDateTime형태의 객체가 반환됩니다.
.date()->QDateTimeEdit의 날짜값을 반환합니다. QDate형태의 객체가 반환됩니다.
.time()->QDateTimeEdit의 시간값을 반환합니다. QTime형태의 객체가 반환됩니다.
.maximumDateTime()->QDateTimeEdit의 날짜/시간값의 최댓값을 반환합니다. QDateTime형태의 객체가 반환됩니다.
.maximumDate()->QDateTimeEdit의 날짜값의 최댓값을 반환합니다. QDate형태의 객체가 반환됩니다.
.maximumTime()->QDateTimeEdit의 시간값의 최댓값을 반환합니다. QTime형태의 객체가 반환됩니다.
.minimumDateTime()->QDateTimeEdit의 날짜/시간값의 최솟값을 반환합니다. QDateTime형태의 객체가 반환됩니다.
.minimumDate()->QDateTimeEdit의 날짜값의 최솟값을 반환합니다. QDate형태의 객체가 반환됩니다.
.minimumTime()->QDateTimeEdit의 시간값의 최솟값을 반환합니다. QTime형태의 객체가 반환됩니다.
ex:
self.dateTimeVar = self.dateTimeEdit.dateTime()
self.dateVar = self.dateTimeEdit.date()
self.timeVar = self.dateTimeEdit.time() QDateTimeEdit의 값 변경
.setDateTime(QDateTime)->QDateTimeEdit의 날짜/시간값을 설정합니다. Parameter로 새로 설정할 날짜/시간값을 가진 QDateTime 객체가 필요합니다.
.setDate(QDate)->QDateTimeEdit의 날짜값을 반환합니다. Parameter로 새로 설정할 날짜값을 가진 QDate 객체가 필요합니다.
.setTime(QTime)->QDateTimeEdit의 시간값을 반환합니다. Parameter로 새로 설정할 시간값을 가진 QTime 객체가 필요합니다. QDateTimeEdit과 입력/표시 형식과 관련된 함수
.calendarPopup()->QDateTimeEdit의 CalendarPopup이 속성이 참인지, 거짓인지를 반환해줍니다.
.setCalendarPopup(bool)->QDateTimeEdit의 CalendarPopup 속성을 변경할 수 있는 함수입니다. Parameter로 True/False 값이 들어갑니다.
.setDisplayFormat(Format Text)->QDateTimeEdit이 어떤 형식으로 날짜와 시간을 보여줄지를 설정합니다. Parameter로 형식문자가 들어갑니다. QDateTimeEdit의 날짜/시간의 최대/최소에 관련된 함수들
.setDateTimeRange(min, max)->QDateTimeEdit의 날짜/시간 범위를 설정합니다. Parameter로 날짜/시간의 최솟값, 최댓값을 입력받습니다.
.setDateRange(min, max)->QDateTimeEdit의 날짜 범위를 설정합니다. Parameter로 날짜의 최솟값, 최댓값을 입력받습니다.
.setTimeRange(min, max)->QDateTimeEdit의 시간 범위를 설정합니다. Parameter로 시간의 최솟값, 최댓값을 입력받습니다.
.setMaximumDateTime(max)->QDateTimeEdit의 날짜/시간값의 최댓값을 설정합니다. Parameter로 새로운 날짜/시간의 최댓값을 입력받습니다.
.setMaximumDate(max)->QDateTimeEdit의 날짜값의 최댓값을 설정합니다. Parameter로 새로운 날짜의 최댓값을 입력받습니다.
.setMaximumTime(max)->QDateTimeEdit의 시간값의 최댓값을 설정합니다. Parameter로 새로운 시간의 최댓값을 입력받습니다.
.setMinimumDateTime(min)->QDateTimeEdit의 날짜/시간값의 최솟값을 설정합니다. Parameter로 새로운 날짜/시간의 최솟값을 입력받습니다.
.setMinimumDate(min)->QDateTimeEdit의 날짜값의 최솟값을 설정합니다. Parameter로 새로운 날짜의 최솟값을 입력받습니다.
.setMinimumTime(min)->QDateTimeEdit의 시간값의 최솟값을 설정합니다. Parameter로 새로운 시간의 최솟값을 입력받습니다.
.clearMaximumDateTime()->QDateTimeEdit의 날짜/시간값의 최댓값을 기본값으로 변경합니다. 기본값은 7999년 12월 31일 23시 59분 59초입니다.
.clearMaximumDate()->QDateTimeEdit의 날짜값의 최댓값을 기본값으로 변경합니다. 기본값은 7999년 12월 31일 입니다.
.clearMaximumTime()->QDateTimeEdit의 시간값의 최댓값을 기본값으로 변경합니다. 기본값은 23시 59분 59초입니다.
.clearMinimumDateTime()->QDateTimeEdit의 날짜/시간값의 최솟값을 기본값으로 변경합니다. 기본값은 1752년 9월 14일 0시 0분 0초 입니다.
.clearMinimumDate()->QDateTimeEdit의 날짜값의 최솟값을 기본값으로 변경합니다. 기본값은 1752년 9월 14일 입니다.
.clearMinimumTime()->QDateTimeEdit의 시간값의 최솟값을 기본값으로 변경합니다. 기본값은 0시 0분 0초 입니다. """ import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5 import uic form_class = uic.loadUiType("L011.DateTimeEdit.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #프로그램이 실행되면 DateTimeEdit의 값이 현재 날짜/시간으로 설정되게 하기
self.currentDateTime = QDateTime.currentDateTime()
self.dateTimeEdit_Test.setDateTime(self.currentDateTime) #버튼들에 기능 할당
self.btn_displayDateTime.clicked.connect(self.displayDateTime)
self.btn_enterDateTime.clicked.connect(self.enterDateTimeFunc)
self.btn_enterDate.clicked.connect(self.enterDateFunc)
self.btn_enterTime.clicked.connect(self.enterTimeFunc)
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 displayDateTime(self) :
#DateTimeEdit의 값을 사용할 때는 아래와 같이 객체를 만들고, 그 객체에 값을 저장한 후 사용해야 합니다.
self.displayDateTimeVar = self.dateTimeEdit_Test.dateTime()
self.displayDateVar = self.dateTimeEdit_Test.date()
self.displayTimeVar = self.dateTimeEdit_Test.time() #QDateTime, QDate, QTime 객체들의 값을 Label에 표시합니다.
#toString 함수는 02.12QDateTimeEdit의 하위페이지에 있는 QDateTime, QDate, QTime 함수를 참고하시기 바랍니다.
self.lbl_displayDateTime.setText(self.displayDateTimeVar.toString("yyyy-MM-dd AP hh:mm:ss"))
self.lbl_displayDate.setText(self.displayDateVar.toString("yyyy-MM-dd"))
self.lbl_displayTime.setText(self.displayTimeVar.toString("AP hh:mm:ss")) def enterDateTimeFunc(self) :
#LineEdit에서 글자를 가져온 후, fromString 함수를 이용해서 QDateTime객체를 만듭니다.
#그 후, setDateTime 함수를 이용해 DateTimeEdit에 적용합니다.
self.enterDateTimeText = self.line_dateTime.text()
self.enterDateTimeVar = QDateTime.fromString(self.enterDateTimeText, "yyyy-MM-dd AP hh:mm:ss")
self.dateTimeEdit_Test.setDateTime(self.enterDateTimeVar) def enterDateFunc(self) :
#LineEdit에서 글자를 가져온 후, fromString 함수를 이용해서 QDate객체를 만듭니다.
#그 후, setDate 함수를 이용해 DateTimeEdit에 적용합니다.
self.enterDateText = self.line_date.text()
self.enterDateVar = QDate.fromString(self.enterDateText, "yyyy-MM-dd")
self.dateTimeEdit_Test.setDate(self.enterDateVar) def enterTimeFunc(self) :
#LineEdit에서 글자를 가져온 후, fromString 함수를 이용해서 QTime객체를 만듭니다.
#그 후, setTime 함수를 이용해 DateTimeEdit에 적용합니다.
self.enterTimeText = self.line_time.text()
self.enterTimeVar = QTime.fromString(self.enterTimeText, "AP hh:mm:ss")
self.dateTimeEdit_Test.setTime(self.enterTimeVar) def changeDisplayFormat(self) :
#LineEdit에서 글자를 가져온 후, 그 글자를 DateTimeEdit의 형식문자로 지정합니다.
self.displayFormatText = self.line_displayFormat.text()
self.dateTimeEdit_Test.setDisplayFormat(self.displayFormatText) def showRangeFunc(self) :
print(self.dateTimeEdit_Test.minimumDateTime())
print(self.dateTimeEdit_Test.maximumDateTime()) def extendMaximum(self) :
#DateTimeEdit의 현재 maximumDateTime을 가져옵니다.
#그 후 addDays 함수를 이용하여 최댓값을 10일 연장시킨 후, setMaximumDateTime을 이용하여 DateTimeEdit에 적용시킵니다.
self.currentMaximumDateTime = self.dateTimeEdit_Test.maximumDateTime()
self.currentMaximumDateTime = self.currentMaximumDateTime.addDays(10)
self.dateTimeEdit_Test.setMaximumDateTime(self.currentMaximumDateTime) def extendMinimum(self) :
#DateTimeEdit의 현재 minimumDateTime을 가져옵니다.
#그 후 addDays 함수를 이용하여 최솟값을 10일 뒤로 미룬 후, setMinimumDateTime을 이용하여 DateTimeEdit에 적용시킵니다.
self.currentMinimumDateTime = self.dateTimeEdit_Test.minimumDateTime()
self.currentMinimumDateTime = self.currentMinimumDateTime.addDays(-10)
self.dateTimeEdit_Test.setMinimumDateTime(self.currentMinimumDateTime) if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

DateEdit,TimeEdit

 #DateEdit,TimeEdit
"""
DateEdit의 날짜가 바뀌었을 때 기능 실행
self.DateEdit이름.dateChanged.connect(함수) TimeEdit의 시간이 바뀌었을 때 기능 실행
self.TimeEdit이름.timeChanged.connect(함수) 현재 상태의 반환
.date()->QDateEdit의 날짜값을 반환합니다. QDate형태의 객체가 반환됩니다.
.maximumDate()->QDateEdit의 날짜값의 최댓값을 반환합니다. QDate형태의 객체가 반환됩니다.
.minimumDate()->QDateEdit의 날짜값의 최솟값을 반환합니다. QDate형태의 객체가 반환됩니다.
self.dateVar = self.dateEdit.date() QDateEdit의 값과 입력/표시형식
.setDate(QDate)->QDateEdit의 날짜값을 반환합니다. Parameter로 새로 설정할 날짜값을 가진 QDate 객체가 필요합니다.
.calendarPopup()->QDateEdit의 CalendarPopup이 속성이 참인지, 거짓인지를 반환해줍니다.
.setCalendarPopup(bool)->QDateEdit의 CalendarPopup 속성을 변경할 수 있는 함수입니다. Parameter로 True/False 값이 들어갑니다.
.setDisplayFormat(Format Text)->QDateEdit이 어떤 형식으로 날짜와 시간을 보여줄지를 설정합니다. Parameter로 형식문자가 들어갑니다. QDateEdit의 최대/최소에 관련된 함수들
.setDateRange(min, max)->QDateEdit의 날짜 범위를 설정합니다. Parameter로 날짜의 최솟값, 최댓값을 입력받습니다.
.setMaximumDate(max)->QDateEdit의 날짜값의 최댓값을 설정합니다. Parameter로 새로운 날짜의 최댓값을 입력받습니다.
.setMinimumDate(min)->QDateEdit의 날짜값의 최솟값을 설정합니다. Parameter로 새로운 날짜의 최솟값을 입력받습니다.
.clearMaximumDate()->QDateEdit의 날짜값의 최댓값을 기본값으로 변경합니다. 기본값은 7999년 12월 31일 입니다.
.clearMinimumDate()->QDateEdit의 날짜값의 최솟값을 기본값으로 변경합니다. 기본값은 1752년 9월 14일 입니다. QTimeEdit의 함수
.time()->QTimeEdit의 시간값을 반환합니다. QTime형태의 객체가 반환됩니다.
.maximumTime()->QTimeEdit의 시간값의 최댓값을 반환합니다. QTime형태의 객체가 반환됩니다.
.minimumTime()->QTimeEdit의 시간값의 최솟값을 반환합니다. QTime형태의 객체가 반환됩니다.
self.timeVar = self.timeEdit.time() QDateEdit의 값과 표시형식
.setTime(QTime)->QTimeEdit의 시간값을 반환합니다. Parameter로 새로 설정할 시간값을 가진 QTime 객체가 필요합니다.
.setDisplayFormat(Format Text)->QTimeEdit이 어떤 형식으로 날짜와 시간을 보여줄지를 설정합니다. Parameter로 형식문자가 들어갑니다. QTimeEdit의 시간의 최대/최소에 관련된 함수들
.setTimeRange(min, max)->QTimeEdit의 시간 범위를 설정합니다. Parameter로 시간의 최솟값, 최댓값을 입력받습니다.
.setMaximumTime(max)->QTimeEdit의 시간값의 최댓값을 설정합니다. Parameter로 새로운 시간의 최댓값을 입력받습니다.
.setMinimumTime(min)->QTimeEdit의 시간값의 최솟값을 설정합니다. Parameter로 새로운 시간의 최솟값을 입력받습니다.
.clearMaximumTime()->QTimeEdit의 시간값의 최댓값을 기본값으로 변경합니다. 기본값은 23시 59분 59초입니다.
.clearMinimumTime()->QTimeEdit의 시간값의 최솟값을 기본값으로 변경합니다. 기본값은 0시 0분 0초 입니다. """ import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5 import uic form_class = uic.loadUiType("L012.DateEdit_TimeEdit.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #프로그램이 실행되면 DateEdit의 값이 현재 날짜/시간으로 설정되게 하기
self.currentDate = QDate.currentDate()
self.dateEdit_Test.setDate(self.currentDate) #프로그램이 실행되면 TimeEdit의 값이 현재 날짜/시간으로 설정되게 하기
self.currentTime = QTime.currentTime()
self.timeEdit_Test.setTime(self.currentTime) #버튼들에 기능 할당
self.btn_time_display.clicked.connect(self.time_display)
self.btn_time_enter.clicked.connect(self.time_enterFunc)
self.btn_time_changeFormat.clicked.connect(self.time_changeDisplayFormat) #버튼들에 기능 할당
self.btn_date_display.clicked.connect(self.date_display)
self.btn_date_enter.clicked.connect(self.date_enterFunc)
self.btn_date_changeFormat.clicked.connect(self.date_changeDisplayFormat)
self.btn_date_showRange.clicked.connect(self.date_showRangeFunc)
self.btn_date_editMaximum.clicked.connect(self.date_extendMaximum)
self.btn_date_editMinimum.clicked.connect(self.date_extendMinimum) def date_display(self) :
self.displayDateVar = self.dateEdit_Test.date()
self.lbl_date_display.setText(self.displayDateVar.toString("yyyy-MM-dd")) def date_enterFunc(self) :
#LineEdit에서 글자를 가져온 후, fromString 함수를 이용해서 QDate객체를 만듭니다.
#그 후, setDate 함수를 이용해 DateEdit에 적용합니다.
self.enterDateText = self.line_date.text()
self.enterDateVar = QDate.fromString(self.enterDateText, "yyyy-MM-dd")
self.dateEdit_Test.setDate(self.enterDateVar) def date_changeDisplayFormat(self) :
#LineEdit에서 글자를 가져온 후, 그 글자를 DateEdit의 형식문자로 지정합니다.
self.displayFormatText = self.line_date_displayFormat.text()
self.dateEdit_Test.setDisplayFormat(self.displayFormatText) def date_showRangeFunc(self) :
print(self.dateEdit_Test.minimumDate())
print(self.dateEdit_Test.maximumDate()) def date_extendMaximum(self) :
#DateEdit의 현재 maximumDate을 가져옵니다.
#그 후 addDays 함수를 이용하여 최댓값을 10일 연장시킨 후, setMaximumDate을 이용하여 DateEdit에 적용시킵니다.
self.currentMaximumDate = self.dateEdit_Test.maximumDate()
self.currentMaximumDate = self.currentMaximumDate.addDays(10)
self.dateEdit_Test.setMaximumDate(self.currentMaximumDate) def date_extendMinimum(self) :
#DateEdit의 현재 minimumDate을 가져옵니다.
#그 후 addDays 함수를 이용하여 최솟값을 10일 뒤로 미룬 후, setMinimumDate을 이용하여 DateEdit에 적용시킵니다.
self.currentMinimumDate = self.dateEdit_Test.minimumDate()
self.currentMinimumDate = self.currentMinimumDate.addDays(-10)
self.dateEdit_Test.setMinimumDate(self.currentMinimumDate) def time_display(self) :
self.displayTimeVar = self.timeEdit_Test.time()
self.lbl_time_display.setText(self.displayTimeVar.toString("AP hh:mm:ss")) def time_enterFunc(self) :
#LineEdit에서 글자를 가져온 후, fromString 함수를 이용해서 QTime객체를 만듭니다.
#그 후, setTime 함수를 이용해 TimeEdit에 적용합니다.
self.enterTimeText = self.line_time.text()
self.enterTimeVar = QTime.fromString(self.enterTimeText, "AP hh:mm:ss")
self.timeEdit_Test.setTime(self.enterTimeVar) def time_changeDisplayFormat(self) :
#LineEdit에서 글자를 가져온 후, 그 글자를 TimeEdit의 형식문자로 지정합니다.
self.displayFormatText = self.line_time_displayFormat.text()
self.timeEdit_Test.setDisplayFormat(self.displayFormatText) if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

calendarWidget

 #CalendarWidget
"""
CalendarWidget에서 날짜가 클릭되었을 때 기능 실행
self.CalendarWidget이름.clicked.connect(함수) CalendarWidget에서 선택된 날짜가 바뀌었을 때 기능 실행
self.CalendarWidget이름.selectionChanged.connect(함수) CalendarWidget에서 달력을 다른 페이지로 넘겼을 때 기능 실행
self.CalendarWidget이름.currentPageChanged.connect(함수) 현재 상태의 반환
.selectedDate()->QCalendarWidget에서 선택된 날짜를 반환합니다. 반환된 값은 QDate의 형식을 갖습니다.
.maximumDate()->QCalendarWidget에서 선택할 수 있는 날짜의 최댓값을 반환합니다. 반환된 값은 QDate의 형식을 갖습니다.
.minimumDate()->QCalendarWidget에서 선택할 수 있는 날짜의 최솟값을 반환합니다. 반환된 값은 QDate의 형식을 갖습니다.
.yearShown()->QCalendarWidget에서 현재 보여주고 있는 연도를 int 형식으로 반환합니다.
.monthShown()->QCalendarWidget에서 현재 보여주고 있는 월을 int 형식으로 반환합니다. Calendar의 페이지 이동
.setCurrentPage(year,month)->현재 페이지를 원하는 연도, 월로 이동합니다. Parameter로 이동하고자 하는 년도, 월의 값을 필요로 합니다.
.showNextYear()->현재 달력에서 내년의 달력을 보여주는 함수입니다.
.showNextMonth()->현재 달력에서 다음달의 달력을 보여주는 함수입니다.
.showPreviousYear()->현재 달력에서 작년의 달력을 보여주는 함수입니다.
.showPreviousMonth()->현재 달력에서 저번달의 달력을 보여주는 함수입니다.
.showToday()->오늘 날짜가 있는 달력을 보여주는 함수입니다. Calendar의 상태변경
.setSelectedDate(QDate)->원하는 날짜가 선택되게 하는 함수입니다. Parameter로 선택할 날짜의 값이 들어있는 QDate 형식의 객체를 필요로 합니다.
.setDateRange(min,max)->QCalendarWidget이 보여줄 날짜의 최대/최솟값을 설정합니다. Parameter로 날짜의 최솟값, 최댓값을 갖고 있는 QDate 형식의 객체가 필요합니다.
.setGridVisible(bool)->달력에서 그리드를 보여줄지를 결정합니다. Parameter로 True/False가 필요하며, True를 입력하면 달력에서 그리드를 보여주게 됩니다.
"""
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5 import uic form_class = uic.loadUiType("L013.CalendarWidget.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #QCalendarWidget의 시그널
self.calendarWidget_Test.clicked.connect(self.calendarClicked)
self.calendarWidget_Test.currentPageChanged.connect(self.calendarPageChanged)
self.calendarWidget_Test.selectionChanged.connect(self.calendarSelectionChanged) #QCalendarWidget이 자동으로 오늘 날짜가 있는 달력을 보여주게 설정
self.todayDate = QDate.currentDate()
self.calendarWidget_Test.setCurrentPage(self.todayDate.year(), self.todayDate.month()) #버튼에 기능 연결
self.btn_prev.clicked.connect(self.prevMonth)
self.btn_next.clicked.connect(self.nextMonth)
self.btn_today.clicked.connect(self.today) #CalendarWidget의 시그널에 연결된 함수들
def calendarClicked(self) :
print(self.calendarWidget_Test.selectedDate()) def calendarPageChanged(self) :
self.year = str(self.calendarWidget_Test.yearShown()) + "년"
self.month = str(self.calendarWidget_Test.monthShown()) + "월"
self.lbl_currentPage.setText(self.year + " " + self.month) def calendarSelectionChanged(self) :
self.selectedDateVar = self.calendarWidget_Test.selectedDate()
self.lbl_selectedDate.setText(self.selectedDateVar.toString()) #버튼에 연결된 함수들
def prevMonth(self) :
self.calendarWidget_Test.showPreviousMonth() def nextMonth(self) :
self.calendarWidget_Test.showNextMonth() def today(self) :
self.calendarWidget_Test.showToday() if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

QPixmap用Label控件

 #QPixmap
"""
QPixmap 객체의 생성
Pixmap은 PyQt5.QtGui에 소속되어 있습니다.
from PyQt5.QtGui import QPixmap 혹은 from PyQt5.QtGui import * 을 사용해야 합니다. QPixmap를 만들어주기 위해서는 위의 문구와 같이 QPixmap을 import 해주어야 합니다.
QPixmap을 import 했다면, 다음과 같이 QPixmap 객체를 생성해줍니다. from PyQt5.QtGui import *
qPixmapVar = QPixmap() QPixmap 객체에 이미지 불러오기 - 파일
qPixmapVar.load("사진파일경로") #상대경로 이용
qPixmapVar.load("testImage.jpg") #절대경로 이용
qPixmapVar.load("/Users/sebinlee/Desktop/Github/PyQt5forBeginner/02.15 Pixmap/testImage.jpg") qPixmapVar.loadFromData(사진 데이터가 있는 객체)
urllib.request를 import합니다.
urllib.request의 urlopen().read() 함수를 이용하여 이미지 데이터를 가져온 후, 이를 객체를 만들어 저장합니다.
2번에서 만든 객체와 .loadFromData()함수를 사용하여 QPixmap객체를 만듭니다.
import urllib.request
urlString = https://avatars1.githubusercontent.com/u/44885477?s=460&v=4
imageFromWeb = urllib.request.urlopen(urlString).read() import urllib.request
qPixmapVar = QPixmap()
qPixmapVar.loadFromDate(imageFromWeb)
label이름.setPixmap(QPixmap 객체) 이미지의 Load/Save
.load(fileName)->이미지 파일에서 이미지를 가져오는 함수입니다. Parameter로 이미지의 경로를 문자열의 형태로 입력해야 합니다.
.loadFromData(Data)->이미지의 정보값을 갖고 있는 객체에서 이미지를 가져오는 함수입니다. Parameter로 이미지의 정보값을 갖고 있는 객체를 입력해야 합니다. 주로 Web에서 이미지를 가져올 때 많이 사용합니다.
.save(fileName)->QPixmap이 가지고 있는 이미지를 파일로 저장할 때 사용합니다. Parameter로 파일의 이름을 문자열의 형태로 입력해야 합니다. 이미지의 크기와 관련된 함수
.scaled(width,height)->이미지의 가로, 세로 크기를 조절합니다. Parameter로 가로, 세로 크기값을 입력받습니다. 사진의 원본 비율을 무시하고 크기를 조정해야 할 때 사용하기 좋습니다.
.scaledToWidth(width)->이미지의 가로크기를 조절합니다. 이 함수를 이용할 경우 세로크기는 새로운 가로값에 따라서 자동으로 조절되며, 이미지의 가로세로 비율은 원본과 동일하게 유지됩니다. Parameter로 가로크기값을 입력합니다.
.scaledToHeight(height)->이미지의 세로크기를 조절합니다. 이 함수를 이용할 경우, 가로크기는 새로운 세로값에 따라서 자동으로 조절되며, 이미지의 가로세로 비율은 원본과 동일하게 유지됩니다. Parameter로 세로크기값을 입력합니다.
.size()->QPixmap이 가지고 있는 이미지의 크기를 QSize형식으로 반환합니다. Pixmap과 관련된 Label의 함수
.setPixmap(QPixmap)->Label의 영역에 사진을 표시합니다. Parameter로 표시할 이미지값을 가지고 있는 QPixmap객체가 필요합니다.
.pixmap()->Label이 표시하고 있는 사진을 반환합니다. 반환된 값은 QPixmap객체의 형식을 가집니다.
"""
import sys
import urllib.request
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import uic form_class = uic.loadUiType("L014.Pixmap.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) self.btn_LoadFromFile.clicked.connect(self.loadImageFromFile)
self.btn_LoadFromWeb.clicked.connect(self.loadImageFromWeb)
self.btn_Save.clicked.connect(self.saveImageFromWeb) def loadImageFromFile(self) :
#QPixmap 객체 생성 후 이미지 파일을 이용하여 QPixmap에 사진 데이터 Load하고, Label을 이용하여 화면에 표시
self.qPixmapFileVar = QPixmap()
self.qPixmapFileVar.load("testImage.png")
self.qPixmapFileVar = self.qPixmapFileVar.scaledToWidth(600)
self.lbl_picture.setPixmap(self.qPixmapFileVar) def loadImageFromWeb(self) : #Web에서 Image 정보 로드
urlString = "https://avatars1.githubusercontent.com/u/44885477?s=460&v=4"
imageFromWeb = urllib.request.urlopen(urlString).read() #웹에서 Load한 Image를 이용하여 QPixmap에 사진데이터를 Load하고, Label을 이용하여 화면에 표시
self.qPixmapWebVar = QPixmap()
self.qPixmapWebVar.loadFromData(imageFromWeb)
self.qPixmapWebVar = self.qPixmapWebVar.scaledToWidth(600)
self.lbl_picture.setPixmap(self.qPixmapWebVar) def saveImageFromWeb(self) :#保存照片
#Label에서 표시하고 있는 사진 데이터를 QPixmap객체의 형태로 반환받은 후, save함수를 이용해 사진 저장
self.qPixmapSaveVar = self.lbl_picture.pixmap()
self.qPixmapSaveVar.save("SavedImage.jpg") if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

QTimer

 #QTimer
"""
from PyQt.QtCore import *
timerVar = QTimer() QTimer의 조작과 관련된 함수
.start()->QTimer가 시간을 체크하기 시작합니다.
.start(msec)->QTimer가 Parameter만큼의 시간이 지난 후 시간을 체크하기 시작합니다. Parameter로 시간을 입력해야 하며, 단위는 ms입니다.
.stop()->QTimer를 중지합니다. QTimer의 Interval과 관련된 함수
.setInterval(msec)->QTimer의 Interval을 설정합니다. Parameter로 Interval을 ms단위로 입력합니다.
.timeout.connect(함수)->매 Interval마다 어떤 함수를 실행할지를 결정합니다. 만약, setInterval 함수로 Interval을 설정하지 않은 경우, 1ms마다 함수가 반복됩니다. QTimer의 상태반환
.interval()->QTimer의 Interval을 반환합니다.
.isActive()->QTimer가 작동중인지 체크합니다. QTimer가 작동중이면 True를, 멈춰있으면 False를 반환합니다. """
from PyQt5.QtCore import *
time = 0# time이라는 변수를 만들고
def printTime() :#매 초마다 실행될 printTime()이라는 함수를 만듭니다
time += 1
print(time) timerVar = QTimer()
timerVar.setInterval(1000)
timerVar.timeout.connect(printTime)
timerVar.start()

ProgressBar

 #ProgressBar
"""
QProgressBar의 값이 변경되었을 때 self.ProgressBar이름.valueChanged.connect(함수) QProgressBar의 값에 관련된 함수
.value()->QProgressBar가 가지고 있는 현재값을 반환합니다.
.setValue(Value)->QProgressBar에 새로운 Value값을 설정합니다. Parameter로 새로운 Value값이 필요합니다.
.reset()->QProgressBar의 Value값을 초기화합니다. 이때 Value값은 QProgressBar의 최솟값 - 1을 한 값으로 초기화됩니다. QProgressBar의 범위와 관련된 함수
.minimum()->QProgressBar의 최솟값을 반환합니다.
.maximum()->QProgressBar의 최댓값을 반환합니다.
.setMinimum(min)->QProgressBar의 최솟값을 새로 설정합니다. Parameter로 새로운 최솟값이 필요합니다.
.setMaximum(min)->QProgressBar의 최솟값을 새로 설정합니다. Parameter로 새로운 최댓값이 필요합니다.
.setRange(min,max)->QProgressBar의 최솟값과 최댓값을 새로 설정합니다. Parameter로 새로운 최솟값, 최댓값이 필요합니다.
"""
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import uic form_class = uic.loadUiType("L015.ProgressBar.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #ProgressBar의 시그널
self.progressBar_Test.valueChanged.connect(self.printValue) #QTimer를 이용하여 매초마다 ProgressBar의 값이 1씩 늘어나게 설정합니다.
#QTimer의Interval을 1000으로 설정한 후, ProgrssBar의 값이 늘어나게 하는 함수를 연결하고 QTimer를 시작합니다.
#QTimer에 대한 설명은 02.17.01 QTimer에서 보실 수 있습니다.
self.timerVar = QTimer()
self.timerVar.setInterval(1000)
self.timerVar.timeout.connect(self.progressBarTimer)
self.timerVar.start() def progressBarTimer(self) :
self.time = self.progressBar_Test.value()
self.time += 1
self.progressBar_Test.setValue(self.time) #ProgressBar의 값이 최댓값 이상이 되면 Timer를 중단시켜 ProgressBar의 값이 더이상 증가하지 않게 합니다.
if self.time >= self.progressBar_Test.maximum() :
self.timerVar.stop() def printValue(self) :
print(self.progressBar_Test.value()) if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

ListWidget

 #ListWidget
"""
QListWidget의 항목이 클릭되었을 때 기능 실행
self.ListWidget이름.itemClicked.connect(함수) QListWidget의 항목이 더블클릭되었을 때 기능 실행
self.ListWidget이름.itemDoubleClicked.connect(함수) QListWidget에서 다른 항목이 선택되었을 때
self.ListWidget이름.currentItemChanged.connect(함수) QListWidget의 함수
QListWidgetItem객체.text() 항목의 반환
.currentRow()->ListWidget에서 선택한 항목이 몇번째 항목인지를 반환합니다.
.currentItem()->ListWidget에서 선택한 항목을 반환합니다. 이때, 반환된 값은 QListWidgetItem의 객체입니다.
.item(row)->ListWidget에서 Row번째 항목을 반환합니다. 이때, 반환된 값은 QListWidgetItem의 객체입니다. 항목의 추가, 삭제
.addItem(String)->ListWidget에 새로운 항목을 추가합니다. Parameter로 추가할 항목의 문자열을 입력합니다.
.insertItem(row, String)->ListWiget의 row번째에 새로운 항목을 추가합니다. Parameter로 추가할 위치와 추가할 항목의 문자열을 입력합니다.
.takeItem(row)->ListWidget의 row번째 항목을 삭제합니다. 삭제된 항목은 QListWidgetItem의 형태로 반환됩니다.
.clear()->ListWidget의 모든 항목을 삭제합니다.
"""
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import uic form_class = uic.loadUiType("L016.ListWidget.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self) #ListWidget의 시그널
self.listWidget_Test.itemClicked.connect(self.chkItemClicked)
self.listWidget_Test.itemDoubleClicked.connect(self.chkItemDoubleClicked)
self.listWidget_Test.currentItemChanged.connect(self.chkCurrentItemChanged) #버튼에 기능 연결
self.btn_add.clicked.connect(self.addListWidget)
self.btn_insert.clicked.connect(self.insertListWidget) self.btn_print.clicked.connect(self.printCurrentItem)
self.btn_print_multi.clicked.connect(self.printMultiItems)
self.btn_remove.clicked.connect(self.removeCurrentItem)
self.btn_clear.clicked.connect(self.clearItem) #ListWidget의 시그널에 연결된 함수들
def chkItemClicked(self) :
print(self.listWidget_Test.currentItem().text()) def chkItemDoubleClicked(self) :
print(str(self.listWidget_Test.currentRow()) + " : " + self.listWidget_Test.currentItem().text()) def chkCurrentItemChanged(self) :
print("Current Row : " + str(self.listWidget_Test.currentRow())) #항목을 추가, 삽입하는 함수들
def addListWidget(self) :
self.addItemText = self.line_addItem.text()
self.listWidget_Test.addItem(self.addItemText) def insertListWidget(self) :
self.insertRow = self.spin_insertRow.value()
self.insertText = self.line_insertItem.text()
self.listWidget_Test.insertItem(self.insertRow, self.insertText) #Button Function
def printCurrentItem(self) :
print(self.listWidget_Test.currentItem().text()) def printMultiItems(self) :
#여러개를 선택했을 때, selectedItems()를 이용하여 선택한 항목을 List의 형태로 반환받습니다.
#그 후, for문을 이용하여 선택된 항목을 출력합니다.
#출력할 때, List안에는 QListWidgetItem객체가 저장되어 있으므로, .text()함수를 이용하여 문자열로 변환해야 합니다.
self.selectedList = self.listWidget_Test.selectedItems()
for i in self.selectedList :
print(i.text()) def removeCurrentItem(self) :
#ListWidget에서 현재 선택한 항목을 삭제할 때는 선택한 항목의 줄을 반환한 후, takeItem함수를 이용해 삭제합니다.
self.removeItemRow = self.listWidget_Test.currentRow()
self.listWidget_Test.takeItem(self.removeItemRow) def clearItem(self) :
self.listWidget_Test.clear() if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

Table Widget

 #Table Widget
"""
QTableView의 속성
showGrid : 표의 선을 보여줄지를 결정합니다.
gridStyle : showGrid를 체크했을 때, 표의 선을 어떤 모양으로 할지를 결정합니다. 기본값은 SolidLine(실선) 입니다. QTableWidget의 속성
rowCount : QTableWidget의 행의 개수를 결정합니다. 기본값은 0입니다.
columnCount : QTableWidget의 열의 개수를 결정합니다. QTableWidget의 시그널
TableWidget의 Cell의 내용이 바뀌었을 때 기능 실행
self.TableWidget이름.cellChanged.connect(함수) TableWidget에서 선택된 Cell이 바뀌었을 때 기능 실행
self.TableWidget이름.currentCellChanged.connect(함수) TableWidget에서 Cell이 클릭 되었을 때 기능 실행
self.TableWidget이름.cellClicked.connect(함수) TableWidget에서 Cell이 더블클릭 되었을 때 기능 실행
self.TableWidget이름.cellDoubleClicked.connect(함수) QTableWidget의 함수
#QTableWidgetItem객체의 생성
qTableWidgetItemVar = QTableWidgetItem("항목이 가질 문자열 입력") #QTableWidgetItem객체의 문자열 반환
qTableWidgetItemVar.text() #QTableWidgetItem객체의 문자열 수정
qTableWidgetItemVar.setText("새로운 문자열") 현재상태의 반환
.item(row, col)->row번째 줄, col번째 열의 항목을 반환합니다. 이때, 반환된 항목은 QTableWidgetItem의 형식으로 반환됩니다.
.currentItem()->현재 선택하고 있는 항목을 반환합니다. 이때, 반환된 항목은 QTableWidgetItem의 형식으로 반환됩니다.
.currentRow()->현재 선택하고 있는 항목의 행을 반환합니다.
.currentColumn()->현재 선택하고 있는 항목의 열을 반환합니다.
.selectedItems()->선택한 항목들을 리스트 형식으로 반환합니다. 리스트 안에는 선택된 항목들이 QTableWidgetItem의 형식으로 포함되어 있습니다.
.selectedRanges()->현재 선택한 범위를 QTableWidgetSelectionRange의 형식으로 반환합니다. 항목의 추가, 삭제와 관련된 함수
.setItem(row,col,item)->row번째 줄, col번째 칸에 Item이라는 항목을 추가합니다. 이때, Item은 QTableWidgetItem 형식의 객체여야 합니다.
.takeItem(row,col)->row번째 줄, col번째 칸에 있는 항목을 삭제합니다. 이때, 삭제된 항목은 QTableWidgetItem형식의 객체로 반환됩니다.
.clear()->행과 열의 Header를 포함한 모든 항목을 삭제합니다.
.clearContents()->행과 열의 Header를 제외한 모든 항목을 삭제합니다. Table의 행과 열에 관련된 함수
.currentColumnCount()->현재 Table Widget에 존재하는 열의 개수를 반환합니다.
.currentRowCount()->현재 Table Widget에 존재하는 행의 개수를 반환합니다.
.setColumnCount(col)->현재 Table Widget의 열의 개수를 col개로 설정합니다.
.setRowCount(row)->현재 Table Widget의 행의 개수를 row개로 설정합니다. .horizontalHeaderItem(col)->col번째 열의 Header를 QTableWidgetItem 형식의 객체로 반환합니다.
.takeHorizontalHeader(col)->col번째 열의 Header를 삭제합니다. 이때 삭제된 항목은 QTableWidgetItem형식의 객체로 반환됩니다.
.setHorizontalHeaderItem(col, item)->col번째 열의 Header를 Item이 가지고 있는 글자로 바꿉니다. 이때, Item은 QTableWidgetItem 형식의 객체여야 합니다.
.setHorizontalHeaderLabels(List)->열들의 Header를 일괄적으로 변경합니다. Parameter로 새로운 Header가 될 문자열이 들어있는 List가 필요하며, List의 0번째 항목이 0번째 열의 Header가 됩니다. .verticalHeaderItem(row)->row번째 줄의 Header를 QTableWidgetItem 형식의 객체로 반환합니다.
.takeVerticalHeader(row)->row번째 줄의 Header를 삭제합니다. 이때 삭제된 항목은 QTableWidgetItem형식의 객체로 반환됩니다.
.setVerticalHeaderItem(row, item)->row번째 줄의 Header를 Item이 가지고 있는 글자로 바꿉니다. 이때, Item은 QTableWidgetItem 형식의 객체여야 합니다.
.setVerticalHeaderLabels(List)->행들의 Header를 일괄적으로 변경합니다. Parameter로 새로운 Header가 될 문자열이 들어있는 List가 필요하며, List의 0번째 항목이 0번째 행의 Header가 됩니다.
""" #https://doc.qt.io/qtforpython/PySide2/QtWidgets/QTableWidget.html?highlight=qtablewidget
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import uic form_class = uic.loadUiType("L017.TableView.ui")[0] class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self)
self.tableWidget_Test.cellChanged.connect(self.cellChangeFunc) def cellChangeFunc(self) :
print("cellChanged") if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()

L001.PyQt的更多相关文章

  1. Python应用03 使用PyQT制作视频播放器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 最近研究了Python的两个GUI包,Tkinter和PyQT.这两个GUI包的底层分别是Tcl/ ...

  2. arcpy+PyQt+py2exe快速开发桌面端ArcGIS应用程序

    前段时间有一个项目,大体是要做一个GIS数据处理工具. 一般的方法是基于ArcObjects来进行开发,因为我对ArcObjects不太熟悉,所以就思考有没有其他简单快速的方法来做. 在查看ArcGI ...

  3. Pyqt 基础功能

    总结Pyqt的基础知识 1. Pyqt  设置禁止最大化及禁止拖拽窗口大小 # PyQT禁止窗口最大化按钮: self.setWindowFlags(QtCore.Qt.WindowMinimizeB ...

  4. 模拟提交API数据Pyqt版

    其实这个模拟提交数据之前已经写过篇: Python requests模拟登录 因为现在在做的项目中需要一个debug请求调试API,用PHP的CURL写了一个,又因Pyqt更能直观灵活的显示请求的参数 ...

  5. pyqt的信号槽机制(转)

    PySide/PyQt Tutorial: Creating Your Own Signals and Slots This article is part 5 of 8 in the series  ...

  6. Qt for Mac 安装(包括PyQt)

    下载Qt: http://qt-project.org/downloads Qt5.2 for Mac:http://download.qt-project.org/official_releases ...

  7. Pyqt+QRcode 生成 识别 二维码

    1.生成二维码 python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳 一.python-qrcode介绍 python-qrco ...

  8. Pyqt 获取打包二进制文件中的资源

    记得有一次打开一个单独exe程序,点击btn中的一个帮助说明按钮,在同级目录下就多出一个help.chm 文件并自动打开. 那这个exe肯定是把help.chm 打包到exe中,当我触发“帮助”按钮的 ...

  9. Pyqt 动态的添加控件

    Pyqt 动态的添加控件 # -*- coding: utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * import sys ...

随机推荐

  1. JDBC——CreateStatement和PrepareStatement作用区别

    本文主要讲了PrepareStatement和CreateStatement的作用区别,大家可以一起学习!走后端的小伙伴都会必修JDBC,在前段时间作者实训期间,看到老师举例的时候用了CreateSt ...

  2. OS课程 ucore_lab2实验报告

    练习零:填写已有实验    本实验依赖实验1.请把你做的实验1的代码填入本实验中代码中有"LAB1"的注释相应部分.提示:可采用diff和patch工具进行半自动的合并(merge ...

  3. LUA学习笔记(第1-4章)

    需要一种简单的脚本语言来代替批处理,它需要足够小巧,同时功能上也应该足够强劲,自然选择了LUA语言. 第一章 Hello World print('Hello World') print(" ...

  4. [python之路]简单介绍

    python介绍 #python是一个什么样的语言?编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言python是一门动态解释性的强类型定义语言. #Python的优缺点##优点Pyth ...

  5. 51Nod 1279 扔盘子 (思维+模拟)

    题意: 有口井,往里扔盘子,最多扔多少个 n<=5e5, 1s 思路: 如果比较高的地方井口比较小,那么下面的再大也没有用,只需要维护一个单调减的数组然后O(n+m)模拟即可 代码: #incl ...

  6. HDU6446 Tree and Permutation(树、推公式)

    题意: 给一棵N个点的树,对应于一个长为N的全排列,对于排列的每个相邻数字a和b,他们的贡献是对应树上顶点a和b的路径长,求所有排列的贡献和 思路: 对每一条边,边左边有x个点,右边有y个点,x+y= ...

  7. MongoDB -> kafka 高性能实时同步(采集)mongodb数据到kafka解决方案

    写这篇博客的目的 让更多的人了解 阿里开源的MongoShake可以很好满足mongodb到kafka高性能高可用实时同步需求(项目地址:https://github.com/alibaba/Mong ...

  8. Docker可视化管理工具Portainer

    Portainer介绍 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台 ...

  9. 《Head first设计模式》学习笔记

    1. 单例模式 2. 工厂模式 3. 抽象工厂 4. 策略模式 5. 观察者模式 6. 装饰者模式 7. 命令模式 8. 适配器模式 9. 外观模式 10. 模版方法模式 11. 迭代器模式 设计模式 ...

  10. Kubernetes 部署 Nginx Ingress Controller 之 nginxinc/kubernetes-ingress

    更新:这里用的是 nginxinc/kubernetes-ingress ,还有个 kubernetes/ingress-nginx ,它们的区别见 Differences Between nginx ...