Skip to main content

PyQt自定义控件库 - 现代化UI组件集合

Project description

TUI.PYQT

一个基于 PyQt6 的自定义控件库,参考 TUI.WPF 设计实现。

项目结构

TUI.PYQT/
├── src/
│   └── tui_pyqt/
│       ├── __init__.py
│       └── components/
│           ├── __init__.py
│           └── tui_button.py
├── tests/
│   ├── test_tui_button.py
│   └── demo.py
├── requirements.txt
└── README.md

安装

依赖要求

  • Python 3.8+
  • PyQt6

安装依赖

pip install -r requirements.txt

使用方式

在 TUI.Pyqt 文件夹下的任何文件中,可以直接引用:

import sys
import os

# 添加src目录到路径
current_dir = os.path.dirname(os.path.abspath(__file__))
src_dir = os.path.join(current_dir, 'src')
sys.path.insert(0, src_dir)

from tui_pyqt import TUIButton, ButtonType, ButtonSize

# 使用
btn = TUIButton("测试", button_type=ButtonType.PRIMARY)

快速开始

基本使用

from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from tui_pyqt.components import TUIButton, ButtonType, ButtonSize

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("TUIButton 示例")
        
        central_widget = QWidget()
        layout = QVBoxLayout(central_widget)
        
        # 创建主按钮
        primary_btn = TUIButton("主按钮", button_type=ButtonType.PRIMARY)
        layout.addWidget(primary_btn)
        
        # 创建成功按钮
        success_btn = TUIButton("成功", button_type=ButtonType.SUCCESS)
        layout.addWidget(success_btn)
        
        # 创建轮廓按钮
        outlined_btn = TUIButton("轮廓按钮", 
                                button_type=ButtonType.PRIMARY, 
                                is_outlined=True)
        layout.addWidget(outlined_btn)
        
        self.setCentralWidget(central_widget)

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec()

TUIButton 组件

功能特性

  • ✅ 多种按钮类型:Primary, Secondary, Success, Danger, Warning, Info, Light, Dark
  • ✅ 多种按钮尺寸:Small, Medium, Large
  • ✅ 轮廓样式(Outlined)
  • ✅ 圆角样式(Round)
  • ✅ 加载状态(Loading)
  • ✅ 前缀和后缀图标支持
  • ✅ 垂直布局支持
  • ✅ 幽灵样式(Ghost)
  • ✅ 自定义圆角半径

API 文档

构造函数参数

TUIButton(
    text: str = "",                                    # 按钮文本
    parent: Optional[QWidget] = None,                  # 父组件
    button_type: ButtonType = ButtonType.PRIMARY,      # 按钮类型
    button_size: ButtonSize = ButtonSize.MEDIUM,       # 按钮尺寸
    is_outlined: bool = False,                         # 是否为轮廓样式
    is_round: bool = False,                            # 是否为圆角样式
    is_loading: bool = False,                          # 是否处于加载状态
    is_vertical_layout: bool = False,                  # 是否为垂直布局
    is_ghost: bool = False,                            # 是否为幽灵样式
    prefix_icon: Optional[str] = None,                 # 前缀图标
    suffix_icon: Optional[str] = None,                 # 后缀图标
    corner_radius: int = 6                             # 圆角半径
)

属性

所有构造函数参数都可以通过属性访问和设置:

button.button_type = ButtonType.SUCCESS
button.button_size = ButtonSize.LARGE
button.is_outlined = True
button.is_round = True
button.is_loading = True
button.prefix_icon = "🚀"
button.suffix_icon = "✓"

使用示例

1. 基本按钮类型

from tui_pyqt.components import TUIButton, ButtonType

primary_btn = TUIButton("主按钮", button_type=ButtonType.PRIMARY)
success_btn = TUIButton("成功", button_type=ButtonType.SUCCESS)
danger_btn = TUIButton("危险", button_type=ButtonType.DANGER)

2. 不同尺寸

from tui_pyqt.components import TUIButton, ButtonSize

small_btn = TUIButton("小按钮", button_size=ButtonSize.SMALL)
medium_btn = TUIButton("中等按钮", button_size=ButtonSize.MEDIUM)
large_btn = TUIButton("大按钮", button_size=ButtonSize.LARGE)

3. 轮廓样式

outlined_btn = TUIButton("轮廓按钮", 
                        button_type=ButtonType.PRIMARY, 
                        is_outlined=True)

4. 圆角样式

round_btn = TUIButton("圆角按钮", 
                     button_type=ButtonType.PRIMARY, 
                     is_round=True)

5. 加载状态

loading_btn = TUIButton("点击加载", button_type=ButtonType.PRIMARY)

def on_click():
    loading_btn.is_loading = True
    # 执行异步操作...
    # 操作完成后: loading_btn.is_loading = False

loading_btn.clicked.connect(on_click)

6. 图标支持

# 前缀图标
save_btn = TUIButton("保存", prefix_icon="💾")

# 后缀图标
delete_btn = TUIButton("删除", suffix_icon="🗑️")

# 前后缀图标
search_btn = TUIButton("搜索", prefix_icon="🔍", suffix_icon="→")

7. 幽灵样式

ghost_btn = TUIButton("幽灵按钮", 
                     button_type=ButtonType.PRIMARY, 
                     is_ghost=True)

8. 组合样式

custom_btn = TUIButton(
    "自定义按钮",
    button_type=ButtonType.SUCCESS,
    button_size=ButtonSize.LARGE,
    is_outlined=True,
    is_round=True,
    prefix_icon="⭐"
)

运行测试

单元测试

cd tests
python test_tui_button.py

演示程序

cd tests
python demo.py

演示程序会展示所有 TUIButton 的功能和样式。

参考

本项目参考了 TUI.WPF 的设计和实现。

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tui_pyqt-0.1.0.tar.gz (207.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tui_pyqt-0.1.0-py3-none-any.whl (252.6 kB view details)

Uploaded Python 3

File details

Details for the file tui_pyqt-0.1.0.tar.gz.

File metadata

  • Download URL: tui_pyqt-0.1.0.tar.gz
  • Upload date:
  • Size: 207.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for tui_pyqt-0.1.0.tar.gz
Algorithm Hash digest
SHA256 86e5d7acc52b8225f03f015abfb31853ac8dfcb4e6950e007804028fe7503fd3
MD5 a4b70273f6a4b7460cd08659ce58713b
BLAKE2b-256 bcd10a26f6f204b3155d1524dfd49f11aa362ddcd6182201151c3a2ec54bddb9

See more details on using hashes here.

File details

Details for the file tui_pyqt-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tui_pyqt-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 252.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for tui_pyqt-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 85ec43f482fb2de9035731e1e35a83a065fb8ffa62fd6ecee0534b7e96d43354
MD5 716e707ae204fabf48598115374d24c8
BLAKE2b-256 a0d7855e6a74662dfca94ff43aac6dfe1f80a5914a00024503a515a681bfe002

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page