Skills Plugins MCP Prompt Model 博客 我的中心

pyqt

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

DeepseekModel 官方收录技能 质量 优秀 · 78 v1.0.0

获取

https://deepseekmodel.com/api/download.php?id=mte90-dotfiles-config-opencode-skills-pyqt-skill-md&format=skill
下载 .skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
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 )
Agent 识别该技能的关键词,点击任意一个即可复制。

该技能未提供触发词。

下载的 .skill 包内含以下字段。
字段 说明
format格式标识(skill/v1)
skill_id技能唯一 ID
name技能名称
version版本号
description技能描述
category所属分类(数组)
trigger_words触发词列表
tags标签列表
source来源标识
source_url来源链接(本页地址)
exported_at导出时间(每次下载生成)
system_prompt系统提示词正文
model_config模型参数:provider / model / temperature / max_tokens / top_p
examples示例
install_guide各平台导入说明(Coze / Dify / Claude / 自定义框架)
同一份技能可按不同平台格式导出。
.skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用 下载
.skillpro 增强格式,额外含脚本 / 工具 / 依赖 / 钩子占位 下载
.json 纯 JSON 导出,只含 system_prompt 与模型参数 下载
Coze 带 frontmatter 的 Markdown,Coze 平台导入用 下载
Dify Dify DSL,创建应用后直接导入 下载

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

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

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

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