위젯은 사용자 인터페이스의 기본 구성 요소입니다. PySide6에서는 다양한 표준 위젯을 제공하며, 이러한 위젯을 사용하여 풍부하고 인터랙티브한 애플리케이션을 만들 수 있습니다. 이 장에서는 PySide6에서 사용할 수 있는 다양한 위젯과 그 사용법에 대해 살펴보겠습니다.
#### 기본 위젯
기본 위젯은 버튼, 라벨, 텍스트 박스와 같은 일반적인 사용자 인터페이스 요소를 포함합니다.
**QPushButton**
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QPushButton Example")
button = QPushButton("Click me")
button.clicked.connect(self.button_clicked)
self.setCentralWidget(button)
def button_clicked(self):
print("Button clicked!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 단순히 "Click me" 버튼을 생성하고 클릭할 때 콘솔에 "Button clicked!"를 출력합니다.
**QLabel**
QLabel은 텍스트나 이미지를 표시하는 데 사용됩니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QLabel Example")
label = QLabel("Hello, PySide6!")
self.setCentralWidget(label)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 "Hello, PySide6!" 텍스트를 표시하는 라벨을 생성합니다.
**QLineEdit**
QLineEdit은 한 줄짜리 텍스트 입력 위젯입니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QLineEdit
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QLineEdit Example")
line_edit = QLineEdit()
line_edit.setPlaceholderText("Enter text here")
self.setCentralWidget(line_edit)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 사용자가 텍스트를 입력할 수 있는 한 줄짜리 텍스트 입력 상자를 생성합니다.
**QCheckBox**
QCheckBox는 체크 박스를 제공하여 사용자가 선택할 수 있게 합니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QCheckBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QCheckBox Example")
checkbox = QCheckBox("Check me")
checkbox.stateChanged.connect(self.checkbox_state_changed)
self.setCentralWidget(checkbox)
def checkbox_state_changed(self, state):
if state == Qt.Checked:
print("Checked!")
else:
print("Unchecked!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 "Check me" 체크 박스를 생성하고 상태가 변경될 때마다 콘솔에 상태를 출력합니다.
**QRadioButton**
QRadioButton은 라디오 버튼을 제공하여 사용자가 여러 옵션 중 하나를 선택할 수 있게 합니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QRadioButton, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QRadioButton Example")
radio1 = QRadioButton("Option 1")
radio2 = QRadioButton("Option 2")
radio1.toggled.connect(self.radio_state_changed)
radio2.toggled.connect(self.radio_state_changed)
layout = QVBoxLayout()
layout.addWidget(radio1)
layout.addWidget(radio2)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def radio_state_changed(self, state):
radio_button = self.sender()
if state:
print(f"{radio_button.text()} selected")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 두 개의 라디오 버튼을 생성하고 사용자가 옵션을 선택할 때 콘솔에 선택된 옵션을 출력합니다.
#### 고급 위젯
PySide6는 더 복잡한 사용자 인터페이스를 만드는 데 사용할 수 있는 다양한 고급 위젯도 제공합니다.
**QComboBox**
QComboBox는 드롭다운 리스트를 제공하여 사용자가 여러 옵션 중 하나를 선택할 수 있게 합니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QComboBox Example")
combo = QComboBox()
combo.addItems(["Option 1", "Option 2", "Option 3"])
combo.currentIndexChanged.connect(self.combo_index_changed)
self.setCentralWidget(combo)
def combo_index_changed(self, index):
print(f"Selected index: {index}")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 드롭다운 리스트를 생성하고 사용자가 선택한 항목의 인덱스를 콘솔에 출력합니다.
**QSlider**
QSlider는 사용자가 값을 선택할 수 있는 슬라이더 위젯을 제공합니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QSlider
from PySide6.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QSlider Example")
slider = QSlider(Qt.Horizontal)
slider.setRange(0, 100)
slider.valueChanged.connect(self.slider_value_changed)
self.setCentralWidget(slider)
def slider_value_changed(self, value):
print(f"Slider value: {value}")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 수평 슬라이더를 생성하고 사용자가 선택한 값을 콘솔에 출력합니다.
**QProgressBar**
QProgressBar는 진행 상태를 표시하는 위젯입니다.
```python
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QProgressBar, QVBoxLayout, QWidget, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QProgressBar Example")
self.progress = QProgressBar()
self.progress.setRange(0, 100)
self.progress.setValue(0)
button = QPushButton("Start")
button.clicked.connect(self.start_progress)
layout = QVBoxLayout()
layout.addWidget(self.progress)
layout.addWidget(button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def start_progress(self):
for i in range(101):
self.progress.setValue(i)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
```
이 예제는 진행 바를 생성하고 버튼을 클릭하면 0에서 100까지 진행 상태를 업데이트합니다.
이 장에서는 PySide6에서 제공하는 다양한 기본 및 고급 위젯을 살펴보았습니다. 다음 장에서는 이러한 위젯을 결합하여 더 복잡한 레이아웃을 만드는 방법을 알아보겠습니다.
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLabel("Hello")
font = widget.font()
font.setPointSize(30)
widget.setFont(font)
widget.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLabel("Hello")
widget.setPixmap(QPixmap("b.jpg"))
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import os
import sys
from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
basedir = os.path.dirname(__file__)
print("Current working folder : ", os.getcwd())
print("Paths are relative to : ", basedir)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLabel("Hello")
widget.setPixmap(QPixmap(os.path.join(basedir,"b.jpg")))
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QCheckBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QCheckBox("This is a checkbox")
widget.setCheckState(Qt.Checked)
widget.stateChanged.connect(self.show_state)
self.setCentralWidget(widget)
def show_state(self, s):
print(Qt.CheckState(s) == Qt.Checked)
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
widget = QComboBox()
widget.addItems(["One", "Two", "Three"])
widget.currentIndexChanged.connect(self.index_changed)
widget.currentTextChanged.connect(self.text_changed)
widget.setEditable(True)
self.setCentralWidget(widget)
def index_changed(self, i):
print(i)
def text_changed(self, s):
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QComboBox()
widget.addItems(["One", "Two", "Three"])
widget.setEditable(True)
widget.setMaxCount(10)
widget.setInsertPolicy(QComboBox.InsertPolicy.InsertAlphabetically)
widget.currentIndexChanged.connect(self.index_changed)
widget.currentTextChanged.connect(self.text_changed)
self.setCentralWidget(widget)
def index_changed(self, i):
print(i)
def text_changed(self, s):
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QListWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QListWidget()
widget.addItems(["One", "Two", "Three"])
widget.currentItemChanged.connect(self.item_changed)
widget.currentTextChanged.connect(self.text_changed)
self.setCentralWidget(widget)
def item_changed(self, i):
print(i.text())
def text_changed(self, s):
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QListWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
self.lwidget = QListWidget()
self.lwidget.addItems(["One","Two","Three"])
self.lwidget.setSelectionMode(QListWidget.MultiSelection)
self.lwidget.currentItemChanged.connect(self.item_changed)
self.lwidget.currentTextChanged.connect(self.text_changed)
self.lwidget.selectionModel().selectionChanged.connect(self.selection_changed)
self.setCentralWidget(self.lwidget)
def item_changed(self, i):
print(i.text())
def selection_changed(self):
print("Selected items:", self.lwidget.selectedItems())
def text_changed(self, s):
print(s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QLineEdit
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QLineEdit()
widget.setMaxLength(10)
widget.setPlaceholderText("Enter your text")
widget.returnPressed.connect(self.return_pressed)
widget.selectionChanged.connect(self.selection_changed)
widget.textChanged.connect(self.text_changed)
widget.textEdited.connect(self.text_edited)
widget.setInputMask('000.000.000;_')
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()
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QSpinBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QSpinBox()
widget.setMinimum(-10)
widget.setMaximum(3)
widget.setPrefix("$")
widget.setSuffix("c")
widget.setSingleStep(3)
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("STR : " ,s)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QSlider
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QSlider()
widget.setMinimum(-10)
widget.setMaximum(10)
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()
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QDial
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
widget = QDial()
widget.setRange(-10, 100)
widget.setSingleStep(1)
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(slef):
print("Pressed!")
def slider_released(self):
print("Released")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()