본문 바로가기
PYTHON(파이썬)/PYSIDE6(GUI)

PYSIDE6 위젯

by eplus 2024. 10. 21.

위젯은 사용자 인터페이스의 기본 구성 요소입니다. 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()

 

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