Skills Plugins MCP Prompt Model 博客 我的中心

pyqt

PyQt/PySide6 overview hub - installation, comparison, project structure. See sub-skills for detailed topics.

DeepseekModel Curated skill Quality Excellent · 78 v1.0.0

Get

https://deepseekmodel.com/api/download.php?id=mte90-dotfiles-config-opencode-skills-pyqt-skill-md&format=skill
Download .skill Standard format with system_prompt and model_config, ready for any agent framework
The actual content of the system_prompt field in the .skill file.
name pyqt description PyQt/PySide6 overview hub - installation, comparison, project structure. See sub-skills for detailed topics. metadata {"author":"mte90","version":"2.0.0","tags":["python","qt","pyqt","pyside","gui","desktop","hub"]} PyQt/PySide Development PyQt and PySide are Python bindings for the Qt application framework for building cross-platform desktop applications. Sub-Skills For detailed information, see the specialized sub-skills: Skill Description Path pyqt-core Signals, slots, timers, settings, file I/O core/SKILL.md pyqt-widgets All widgets and layouts widgets/SKILL.md pyqt-threading QThread, thread pools, concurrency threading/SKILL.md pyqt-dialogs Standard and custom dialogs dialogs/SKILL.md pyqt-testing pytest-qt testing patterns testing/SKILL.md pyqt-styling QSS styling and themes styling/SKILL.md pyqt-multimedia Audio, video, camera, recording multimedia/SKILL.md PyQt vs PySide Comparison Feature PyQt5 PyQt6 PySide6 License GPL GPL LGPL Qt Version Qt 5 Qt 6 Qt 6 Maintained Security only Active Active Signal Syntax pyqtSignal pyqtSignal Signal Slot Syntax pyqtSlot pyqtSlot Slot Property Syntax pyqtProperty pyqtProperty Property Commercial Use Requires license Requires license Free QML Registration qmlRegisterType() qmlRegisterType() @QmlElement When to Use Each PySide6 : Recommended for most projects (LGPL, official Qt Company support) PyQt6 : If you need GPL compatibility or existing PyQt codebase PyQt5 : Legacy projects only (security fixes only) Installation PySide6 (Recommended) pip install PySide6 PyQt6 pip install PyQt6 PyQt5 (Legacy) pip install PyQt5 Additional Dependencies # System packages (Ubuntu/Debian) sudo apt install libgl1-mesa-glx libglib2.0-0 # System packages (Fedora) sudo dnf install mesa-libGL glib2 # System packages (Arch) sudo pacman -S mesa glib2 Basic Application #!/usr/bin/env python3 import sys from PySide6.QtWidgets import QApplication, QMainWindow, QLabel from PySide6.QtCore import Qt class MainWindow ( QMainWindow ): def __init__ ( self ): super ().__init__() self .setWindowTitle( "My Application" ) self .setGeometry( 100 , 100 , 800 , 600 ) label = QLabel( "Hello, Qt!" ) label.setAlignment(Qt.AlignmentFlag.AlignCenter) self .setCentralWidget(label) def main (): app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app. exec ()) if __name__ == "__main__" : main() Recommended Project Structure my_app/ ├── src/ │ ├── __init__.py │ ├── main.py │ ├── main_window.py │ ├── widgets/ │ │ ├── __init__.py │ │ └── custom_widget.py │ ├── models/ │ │ └── data_model.py │ ├── resources/ │ │ ├── icons/ │ │ └── styles/ │ │ └── style.qss │ └── utils/ │ └── helpers.py ├── tests/ │ └── test_main.py ├── requirements.txt └── pyproject.toml Quick Reference Core Imports # QtWidgets - UI Components from PySide6.QtWidgets import ( QApplication, QMainWindow, QWidget, QLabel, QPushButton, QLineEdit, QTextEdit, QComboBox, QSpinBox, QCheckBox, QRadioButton, QSlider, QProgressBar, QGroupBox, QTabWidget, QStackedWidget, QSplitter, QListWidget, QTreeWidget, QTableWidget, QScrollArea, QToolBar, QStatusBar, QMenuBar, QMenu ) # QtCore - Core Non-GUI from PySide6.QtCore import ( Qt, QObject, QTimer, QThread, Signal, Slot, Property, QSize, QPoint, QRect, QSettings, QFile, QDir, QUrl, QMimeData, QDateTime, QDate, QTime ) # QtGui - Graphics from PySide6.QtGui import ( QIcon, QPixmap, QImage, QPainter, QPen, QBrush, QColor, QFont, QCursor, QKeySequence, QShortcut ) Signal/Slot Basics from PySide6.QtCore import QObject, Signal, Slot class MyObject ( QObject ): valueChanged = Signal( int ) @Slot( int ) def setValue ( self, value ): self ._value = value self .valueChanged.emit(value) # Connect button.clicked.connect( self .onButtonClick) # Emit self .valueChanged.emit( 42 ) Layout Basics from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout # Vertical layout = QVBoxLayout() layout.addWidget(label) layout.addWidget(button) # Horizontal h_layout = QHBoxLayout() h_layout.addWidget(left) h_layout.addWidget(right) # Grid grid = QGridLayout() grid.addWidget(label, 0 , 0 ) grid.addWidget( input , 0 , 1 ) # Form form = QFormLayout() form.addRow( "Name:" , nameEdit) Signals and Slots Signal Declaration from PySide6.QtCore import QObject, Signal class MyObject ( QObject ): # Define signals at class level valueChanged = Signal( int ) nameChanged = Signal( str ) dataReady = Signal( dict ) errorOccurred = Signal( str ) # Signal with multiple arguments positionChanged = Signal( int , int ) Slot Declaration from PySide6.QtCore import Slot class MyObject ( QObject ): @Slot() def doSomething ( self ): print ( "Action performed" ) @Slot( int ) def setValue ( self, value ): self ._value = value @Slot( str , int ) def processData ( self, name, count ): pass @Slot( result= str ) # Return type annotation def getName ( self ) -> str : return self ._name Connecting Signals to Slots # Connect signal to slot button.clicked.connect( self .onButtonClick) valueChanged.connect( self .updateValue) # Connect with lambda button.clicked.connect( lambda : print ( "Clicked!" )) # Connect with partial from functools import partial button.clicked.connect(partial( self .processItem, item_id)) # Disconnect button.clicked.disconnect( self .onButtonClick) # Emit signal self .valueChanged.emit( 42 ) self .positionChanged.emit(x, y) # Block signals temporarily button.blockSignals( True ) button.setChecked( True ) button.blockSignals( False ) PyQt6 Syntax (Different) from PyQt6.QtCore import QObject, pyqtSignal, pyqtSlot class MyObject ( QObject ): valueChanged = pyqtSignal( int ) @pyqtSlot( int ) def setValue ( self, value ): pass Layout Management Box Layouts from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QGroupBox # Vertical layout layout = QVBoxLayout() layout.addWidget(label) layout.addWidget(button) layout.addStretch() # Add stretchable space layout.addWidget(bottom_label) # Horizontal layout h_layout = QHBoxLayout() h_layout.addWidget(left_button) h_layout.addStretch() h_layout.addWidget(right_button) # Nest layouts main_layout = QVBoxLayout() main_layout.addLayout(h_layout) Grid Layout from PySide6.QtWidgets import QGridLayout layout = QGridLayout() layout.addWidget(label1, 0 , 0 ) # row 0, col 0 layout.addWidget(lineEdit, 0 , 1 ) # row 0, col 1 layout.addWidget(label2, 1 , 0 ) # row 1, col 0 layout.addWidget(comboBox, 1 , 1 ) # row 1, col 1 # Span multiple cells layout.addWidget(bigWidget, 2 , 0 , 1 , 2 ) # row 2, col 0, span 1 row, 2 cols Form Layout from PySide6.QtWidgets import QFormLayout layout = QFormLayout() layout.addRow( "Name:" , nameLineEdit) layout.addRow( "Email:" , emailLineEdit) layout.addRow( "Age:" , ageSpinBox) Stack Layout from PySide6.QtWidgets import QStackedLayout stack = QStackedLayout() stack.addWidget(page1) stack.addWidget(page2) stack.addWidget(page3) stack.setCurrentIndex( 0 ) # Show page1 Layout Properties # Margins and spacing layout.setContentsMargins( 10 , 10 , 10 , 10 ) # left, top, right, bottom layout.setSpacing( 5 ) # Widget alignment layout.addWidget(label, alignment=Qt.AlignCenter) # Stretch factors layout.addWidget(widget1, stretch= 1 ) layout.addWidget(widget2, stretch= 2 ) # Gets twice the space Common Widgets Labels and Display # Label label = QLabel( "Text" ) label.setText( "New text" ) label.setPixmap(QPixmap( "image.png" )) label.setAlignment(Qt.AlignCenter) label.setWordWrap( True ) # Progress bar progress = QProgressBar() progress.setValue( 50 ) progress.setRange( 0 , 100 ) progress.setTextVisible( True ) # LCD Number lcd = QLCDNumber() lcd.display( 123 ) Input Widgets # Line edit lineEdit = QLineEdit() lineEdit.setText( "Default" ) lineEdit.setPlaceholderText( "Enter text..." ) lineEdit.setEchoMode(QLineEdit.Password) lineEdit.setMaxLength( 100 ) lineEdit.textChanged.connect( self .onTextChanged) # Text edit textEdit = QTextEdit() textEdit.setPlainText( "Plain text" ) textEdit.setHtml( "<b>HTML</b>" ) textEdit.toPlainText() # Spin box spinBox = QSpinBox() spinBox.setRange( 0 , 100 ) spinBox.setValue( 50 ) spinBox.setSuffix( " px" ) spinBox.valueChanged.connect( self .onValueChanged) # Combo box comboBox = QComboBox() comboBox.addItems([ "Option 1" , "Option 2" , "Option 3" ]) comboBox.setCurrentIndex( 0 ) comboBox.currentTextChanged.connect( self .onSelectionChanged) # Checkbox checkBox = QCheckBox( "Enable feature" ) checkBox.setChecked( True ) checkBox.stateChanged.connect( self .onStateChanged) # Radio button radio1 = QRadioButton( "Option A" ) radio2 = QRadioButton( "Option B" ) radio1.setChecked( True ) radio1.toggled.connect( self .onToggled) # Slider slider = QSlider(Qt.Horizontal) slider.setRange( 0 , 100 ) slider.setValue( 50 ) slider.valueChanged.connect( self .onSliderChanged) Buttons # Push button button = QPushButton( "Click Me" ) button.clicked.connect( self .onButtonClick) button.setEnabled( False ) button.setDefault( True ) # Tool button toolButton = QToolButton() toolButton.setIcon(QIcon( "icon.png" )) toolButton.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) # Checkable button checkButton = QPushButton( "Toggle" ) checkButton.setCheckable( True ) checkButton.toggled.connect( self .onToggle) Container Widgets # Group box groupBox = QGroupBox( "Settings" ) groupBox.setCheckable( True ) groupBox.setChecked( True ) # Tab widget tabWidget = QTabWidget() tabWidget.addTab(page1, "Tab 1" ) tabWidget.addTab(page2, "Tab 2" ) tabWidget.setCurrentIndex( 0 ) # Scroll area scrollArea = QScrollArea() scrollArea.setWidget(contentWidget) scrollArea.setWidgetResizable( True ) # Splitter splitter = QSplitter(Qt.Horizontal) splitter.addWidget(leftWidget) splitter.addWidget(rightWidget) splitter.setSizes([ 200 , 400 ]) Item Views # List widget listWidget = QListWidget() listWidget.addItems([ "Item 1" , "Item 2" , "Item 3" ]) listWidget.currentItemChanged.connect( self .onItemChanged) # Tree widget treeWidget = QTreeWidget() treeWidget.setHeaderLabels([ "Name" , "Value" ]) item = QTreeWidgetItem([ "Parent" , "0" ]) child = QTreeWidgetItem([ "Child" , "1" ]) item.addChild(child) treeWidget.addTopLevelItem(item) # Table widget table = QTableWidget() table.setRowCount( 3 )
Keywords that activate this skill. Click one to copy it.

This skill does not provide trigger words.

The downloaded .skill package contains the following fields.
Field Description
formatFormat tag (skill/v1)
skill_idUnique skill ID
nameSkill name
versionVersion
descriptionDescription
categoryCategories (array)
trigger_wordsTrigger words
tagsTags
sourceSource
source_urlSource URL (this page)
exported_atExported at (set per download)
system_promptSystem prompt body
model_configModel config: provider / model / temperature / max_tokens / top_p
examplesExamples
install_guideImport guide for Coze / Dify / Claude / custom frameworks
The same skill can be exported in different platform formats.
.skill Standard format with system_prompt and model_config, ready for any agent framework Download
.skillpro Enhanced format with scripts, tools, dependencies and hooks Download
.json Plain JSON export with system_prompt and model parameters only Download
Coze Markdown with frontmatter, for Coze platform import Download
Dify Dify DSL, import directly after creating an app Download

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

验证码 --

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。