ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PYSIDE6 위젯
    PYTHON(파이썬)/PYSIDE6(GUI) 2024. 10. 21. 06:01
    728x90
    반응형

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