import sys
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QVBoxLayout # <2>
from PyQt6.QtWidgets import QWidget # <1>
from PyQt6.QtWidgets import (
QApplication,
QCheckBox,
QComboBox,
QDateEdit,
QDateTimeEdit,
QDial,
QDoubleSpinBox,
QFontComboBox,
QLabel,
QLCDNumber,
QLineEdit,
QMainWindow,
QProgressBar,
QPushButton,
QRadioButton,
QSlider,
QSpinBox,
QTimeEdit,
)
# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Widgets App")
layout = QVBoxLayout()
widgets = [
QCheckBox,
QComboBox,
QDateEdit,
QDateTimeEdit,
QDial,
QDoubleSpinBox,
QFontComboBox,
QLCDNumber,
QLabel,
QLineEdit,
QProgressBar,
QPushButton,
QRadioButton,
QSlider,
QSpinBox,
QTimeEdit,
]
for w in widgets:
layout.addWidget(w())
widget = QWidget()
widget.setLayout(layout)
# Set the central widget of the Window. Widget will expand
# to take up all the space in the window by default.
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
widget = QLabel("1") # The label is created with the text 1
widget.setText("2") # The label now shows 2
QLabel
import sys
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLabel("Hello")
font = widget.font() # <1>
font.setPointSize(30)
widget.setFont(font)
widget.setAlignment(
Qt.AlignmentFlag.AlignHCenter
| Qt.AlignmentFlag.AlignVCenter
) # <2>
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
<widget>.font()를 사용하여 현재 글꼴을 가져 와서 다른 widget에 적용합니다. 이렇게 하면 글꼴 문자가 시스템 글꼴 스타일과 동일하게 유지됩니다.
정렬은 QtCore의 네임 스페이스의 플래그를 사용하여 지정됩니다.
# Pixmap 사용
import sys
from PyQt6.QtGui import QPixmap
from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLabel("Hello")
widget.setPixmap(QPixmap('otje.jpg'))
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
- 필요 조건 : 실행파일과 그림파일이 동일 디렉터리에 위치할 것 + vscode 디버그 위치(작업위치)가 실행파일 디렉터리와 동일할 것
# Set the paths based on the active project ( 실행파일과 그림파일이 동일한 경우 )
실행파일_경로 = os.path.dirname(__file__)
디버그_작업디렌터리 = os.getcwd()
그림파일_경로_설정 = os.path.join(실행파일_경로, 그림파일)
# setScaledContents 적용
기본적으로 이미지는 종횡비를 유지하면서 크기가 조정됩니다. 창에 완전히 맞게 늘어나고 크기를 조정하려면 QLabel에서 QWidget.setScaledContents(True)를 설정할 수 있습니다.
QCheckBox
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QCheckBox, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QCheckBox("This is a checkbox")
widget.setCheckState(Qt.CheckState.Checked)
# For tristate: widget.setCheckState(Qt.PartiallyChecked)
# Or: widget.setTristate(True)
widget.stateChanged.connect(self.show_state)
self.setCentralWidget(widget)
def show_state(self, s):
print(Qt.CheckState(s) == Qt.CheckState.Checked)
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
- .setCheck : check state( True , False) 받음
- .setCheckState : Qt. namespace flag를 사용한 state
Qt.CheckState.Checked - Item is checked(2)
Qt.CheckState.Unchecked - Item is unchecked(0)
Qt.CheckState.PartiallyChecked - Item is partially checked(1)
부분적으로 확인 된 (Qt.CheckState.PartiallyChecked) 상태를 지원하는 확인란은 일반적으로 켜짐도 끄지도 않은 'Tristate'라고합니다. 이 상태의 확인란은 일반적으로 회색으로 표시된 확인란으로 표시되며 하위 항목이 부모 확인란에 연결된 계층적 확인란 정렬에 일반적으로 사용됩니다.
값을 Qt.CheckState.PartiallyCheck로 설정하면 확인란은 세 가지 가능한 상태가됩니다. .setTristate(True)를 사용하여 현재 상태를 부분적으로 선택하도록 설정하지 않고 확인란을 트라이 상태로 설정할 수도 있습니다.
QComboBox
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QComboBox, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QComboBox()
widget.addItems(["One", "Two", "Three"])
widget.currentIndexChanged.connect(self.index_changed)
widget.currentTextChanged.connect(self.text_changed)
self.setCentralWidget(widget)
def index_changed(self, i): # i is an int
print(i)
def text_changed(self, s): # s is a str
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
- .currentIndexChanged signal : index 방출
- .currentTextChanged signal : string 방출
- widget.setEditable(True) : 항목 편집 가능 설정
- widget.setInsertPolicy(삽입방식flag) : 삽입 방식 설정
QComboBox.InsertPolicy.NoInsert - No insert
QComboBox.InsertPolicy.InsertAtTop - Insert as first item
QComboBox.InsertPolicy.InsertAtCurrent - Replace currently selected item
QComboBox.InsertPolicy.InsertAtBottom - Insert after last item
QComboBox.InsertPolicy.InsertAfterCurrent - Insert after current item
QComboBox.InsertPolicy.InsertBeforeCurrent - Insert before current item
QComboBox.InsertPolicy.InsertAlphabetically - Insert in alphabetical order
- widget.setMaxCount( 10 ) : 항목 수 제한
QListWidget
import sys
from PyQt6.QtWidgets import QApplication, QListWidget, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QListWidget()
widget.addItems(["One", "Two", "Three"])
widget.currentItemChanged.connect(self.index_changed)
widget.currentTextChanged.connect(self.text_changed)
self.setCentralWidget(widget)
def index_changed(self, i): # Not an index, i is a QListItem
print(i.text())
def text_changed(self, s): # s is a str
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
QLineEdit
import sys
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QLineEdit, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLineEdit()
widget.setMaxLength(10)
widget.setPlaceholderText("Enter your text")
# widget.setReadOnly(True) # uncomment this to make readonly
widget.returnPressed.connect(self.return_pressed)
widget.selectionChanged.connect(self.selection_changed)
widget.textChanged.connect(self.text_changed)
widget.textEdited.connect(self.text_edited)
self.setCentralWidget(widget)
def return_pressed(self):
print("Return pressed!")
self.centralWidget().setText("BOOM!")
def selection_changed(self):
print("Selection changed")
print(self.centralWidget().selectedText())
def text_changed(self, s):
print("Text changed...")
print(s)
def text_edited(self, s):
print("Text edited...")
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
widget.setInputMask('000.000.000.000;_') : To validate IPv4 addresses.
QSpinBox(int자료표시) and QDoubleSpinBox(float자료표시)
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QSpinBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QSpinBox()
# Or: widget = QDoubleSpinBox()
widget.setMinimum(-10)
widget.setMaximum(3)
# Or: widget.setRange(-10,3)
widget.setPrefix("$")
widget.setSuffix("c")
widget.setSingleStep(3) # Or e.g. 0.5 for QDoubleSpinBox
widget.valueChanged.connect(self.value_changed)
widget.textChanged.connect(self.value_changed_str)
self.setCentralWidget(widget)
def value_changed(self, i):
print(i)
def value_changed_str(self, s):
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
- 표시 범위 지정 : setMinimum and setMaximum, or alternatively use setRange to set both simultaneously.
- 표시 방식 : .setPrefix / .setSuffix
- 이동 단위 : .setSingleStep
- signal
.valueChanged signal : 값이 변경시 발생, pre/suffix 제외한 숫자 값
.textChanged signal : " , 포함
QSlider
QSlider는 내부적으로 QDoubleSpinBox와 매우 유사하게 작동하는 슬라이드바 위젯을 제공합니다.
현재 값을 숫자로 표시하는 대신 위젯 길이를 따라 슬라이더 핸들의 위치로 표시됩니다.
이는 두 극단 사이의 조정을 제공할 때 유용하지만 절대적인 정확도가 필요하지 않은 경우에 유용합니다. 이 유형의 위젯의 가장 일반적인 용도는 볼륨 컨트롤입니다.
슬라이더가 위치를 이동할 때마다 트리거되는 .sliderMoved 신호와 슬라이더를 클릭할 때마다 방출되는 .sliderPressed 신호가 있습니다.
import sys
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QSlider
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QSlider()
widget.setMinimum(-10)
widget.setMaximum(3)
# Or: widget.setRange(-10,3)
widget.setSingleStep(3)
widget.valueChanged.connect(self.value_changed)
widget.sliderMoved.connect(self.slider_position)
widget.sliderPressed.connect(self.slider_pressed)
widget.sliderReleased.connect(self.slider_released)
self.setCentralWidget(widget)
def value_changed(self, i):
print(i)
def slider_position(self, p):
print("position", p)
def slider_pressed(self):
print("Pressed!")
def slider_released(self):
print("Released")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
방향 설정 Fag : widget.QSlider(Qt.Orientiation.Vertical)
QDial
Qslider와 동일 기능
'PyQt5_' 카테고리의 다른 글
Actions, Toolbars & Menus (0) | 2023.03.13 |
---|---|
Layouts (0) | 2023.03.11 |
Signals & Slots (0) | 2023.03.10 |
Sizing windows and widgets (0) | 2023.03.10 |
빈 창 (0) | 2023.03.10 |
댓글