-
PYSIDE6 위젯PYTHON(파이썬)/PYSIDE6(GUI) 2024. 10. 21. 06:01728x90반응형
위젯은 사용자 인터페이스의 기본 구성 요소입니다. 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 Qtfrom 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 QPixmapfrom 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 osimport sys
from PySide6.QtGui import QPixmapfrom 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 Qtfrom 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 sysfrom PySide6.QtCore import Qtfrom 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 Qtfrom 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 Qtfrom 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 sysfrom 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 Qtfrom 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 Qtfrom 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()728x90'PYTHON(파이썬) > PYSIDE6(GUI)' 카테고리의 다른 글
PYSIDE6 액션, 도구 모음, 메뉴 (0) 2024.10.23 PYSIDE6 레이아웃 (0) 2024.10.22 PYSIDE6 시그널과 슬롯 (0) 2024.10.20 PYSIDE 첫번째 APP (0) 2024.10.19 QT? (0) 2024.10.19