PyQt6를 사용하면 다양한 위젯을 만들 수 있지만 때로는 기본 제공 위젯만으로는 원하는 기능을 구현하기 어려운 경우가 있습니다. 이런 경우 PyQt6 QT Designer 사용자 지정 위젯 만들기가 가능합니다. 몇가지 예시와 내용을 통해 같이 알아 보겠습니다.
1. PyQt6 사용자 지정 위젯 만들기
PyQt6에서 사용자 지정 위젯을 만드는 것은 꽤 간단합니다. 우선 PyQt6.QtWidgets.QWidget 클래스를 상속하는 새 클래스를 만듭니다. 그런 다음 새 클래스에서 사용할 모든 위젯, 레이아웃 및 다른 구성 요소를 정의합니다.
예를 들어, 새 클래스에서 QPushButton과 QLabel 위젯을 사용하려면 새 클래스에서 이러한 위젯을 만들고 배치해야합니다. 이러한 구성 요소는 원하는 기능에 따라 다양하게 조합할 수 있습니다.
![PyQt6 QT Designer 사용자 지정 위젯](https://toylee.net/wp-content/uploads/2023/05/image-83.png)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from PyQt6.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton, QLabel class CustomWidget(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): layout = QVBoxLayout() button = QPushButton(“Click me”) label = QLabel(“Hello, World!”) layout.addWidget(button) layout.addWidget(label) self.setLayout(layout) if __name__ == ‘__main__’: app = QApplication([]) widget = CustomWidget() widget.show() app.exec() | cs |
2. Qt Designer 사용한 위젯 만들기
사용자 지정 위젯을 만드는 또 다른 방법은 Qt Designer를 사용하는 것입니다. Qt Designer는 PyQt6에서 GUI를 디자인하고 코드를 생성하는 데 사용되는 시각적인 도구입니다. 디자인을 마친 후 코드를 생성하면 사용자 지정 위젯을 쉽게 만들 수 있습니다. 쉽게 말하자면 파이썬 코드로 ui를 변환하여 불러오는 방법 중 하나 입니다.
ui를 유지한 상태로 파이썬에 불러오길 원한다면 아래 링크 글을 참고해주세요
[Qt Designer 사용자 정의 위젯 설계]
- Qt Designer를 시작하고 새 양식을 만듭니다.
- 원하는 위젯(예: QPushButton 및 QLabel)을 양식으로 끌어다 놓습니다.
- 필요에 따라 위젯의 속성, 레이아웃 및 디자인을 사용자 지정합니다.
- 양식을 “custom_widget.ui”로 저장합니다.
![QT Designer 1](https://toylee.net/wp-content/uploads/2023/05/image-84.png)
![QT Designer 2](https://toylee.net/wp-content/uploads/2023/05/image-85.png)
[Qt Designer 형식에서 Python 코드 생성]
- 터미널 또는 명령 프롬프트를 열고 “custom_widget.ui”가 저장된 디렉토리로 이동합니다.
- 명령을 사용하여
pyuic6
.ui 파일에서 Python 코드를 생성합니다.
1 2 | pyuic6 –x custom_widget.ui –o custom_widget_ui.py | cs |
- 이 명령은 사용자 정의 위젯의 디자인을 나타내는 코드가 포함된 “custom_widget_ui.py”라는 Python 파일을 생성합니다.ui
[Python 코드 작성 – from custom_widget_ui]
- 별도의 Python 파일을 만들고 “main.py”라고 하고 필요한 모듈을 가져옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from PyQt6.QtWidgets import QApplication, QWidget from custom_widget_ui import Ui_CustomWidget # Import the generated custom widget class class CustomWidget(QWidget, Ui_CustomWidget): def __init__(self): super().__init__() self.setupUi(self) if __name__ == ‘__main__’: app = QApplication([]) widget = CustomWidget() widget.show() app.exec() | cs |
- 이 코드에서 필요한 모듈을 가져오고 “custom_widget_ui.py”에서 생성된 사용자 방지 위젯 클래스( Ui_CustomWidget)를 가져옵니다.
- QWidget및 Ui_CustomWidget모두 상속되는 새 클래스를 CustomWidget정의합니다.
- init메서드 내에서 setupUi(self)호출하여 생성된 코드를 사용하여 사용자 정의 위젯을 설정합니다.
- if name == ‘main‘:블록에서 QApplication제작을 CustomWidget제한하고 표시하고 애플리케이션 이벤트 루프를 시작합니다.
3. PyQt6 사용자 지정 위젯 활용
PyQt6에서 사용자 지정 위젯을 만들면 기존 위젯보다 더 큰 유연성과 기능을 제공하는 애플리케이션을 만들 수 있습니다. 예를 들어, 사용자 지정 위젯을 사용하여 데이터베이스 연결, 파일 열기 및 저장, 그래픽 표시 등을 수행하는 애플리케이션을 만들 수 있습니다. 자신만의 구성 요소를 만들어 애플리케이션을 더욱 효율적이고 유연하게 만들 수 있습니다.
![PyQt6 사용자 지정 위젯 활용1](https://toylee.net/wp-content/uploads/2023/05/image-86-1024x514.png)
![PyQt6 사용자 지정 위젯 활용2](https://toylee.net/wp-content/uploads/2023/05/image-88-1024x692.png)
![PyQt6 사용자 지정 위젯 활용3](https://toylee.net/wp-content/uploads/2023/05/image-89.png)
FileSelectionWidget이 예제에서는 사용자가 파일을 선택할 수 있도록 하는 사용자 지정 위젯을 만듭니다 . 위젯은 QPushButton파일 선택 대화 상자를 트리거하는 것과 QLabel선택한 파일 경로를 표시하는 것으로 구성됩니다.
메서드 내부에서 init_ui레이아웃을 설정하고 clicked의 신호를 메서드 select_file_button에 연결합니다 select_file.
이 select_file메서드는 사용자가 버튼을 클릭할 때 트리거됩니다. QFileDialog사용자가 파일을 선택할 수 있는 곳이 열립니다 . 파일을 선택하면 파일 경로가 에 표시됩니다 selected_file_label.
코드를 실행하면 사용자 정의 위젯이 표시되며 사용자는 “파일 선택” 버튼을 클릭하여 파일을 선택할 수 있습니다. 그러면 선택한 파일 경로가 위젯에 표시됩니다.
사용자 정의 위젯에 추가 기능을 추가하거나 애플리케이션 요구 사항에 따라 다른 기능으로 다른 사용자 정의 위젯을 생성하여 이 예제를 확장할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from PyQt6.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton, QLabel, QFileDialog class FileSelectionWidget(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): layout = QVBoxLayout() self.selected_file_label = QLabel(“No file selected”) select_file_button = QPushButton(“Select File”) select_file_button.clicked.connect(self.select_file) layout.addWidget(select_file_button) layout.addWidget(self.selected_file_label) self.setLayout(layout) def select_file(self): file_dialog = QFileDialog() file_path, _ = file_dialog.getOpenFileName(self, “Select File”) if file_path: self.selected_file_label.setText(file_path) if __name__ == ‘__main__’: app = QApplication([]) widget = FileSelectionWidget() widget.show() app.exec() | cs |
4. 결론 및 의견
사용자 지정 위젯을 만드는 것은 모든 PyQt6 개발자에게 권장되는 기술입니다. 사용자 지정 위젯을 만들면 더욱 효율적이고 유연한 애플리케이션을 만들 수 있습니다. 이제 PyQt6 QT Designer 사용자 지정 위젯 방을 알게되었으니, 여러분도 한번 도전해보세요!
[관련글]