1127 字
6 分钟
DUI
Waiting for api.github.com...
前言
在开发服务器后台管理工具时,图形界面的兼容性一直是一个棘手的问题。为了解决这一问题,我开发了DUI库(Dynamic User Interface),一个基于纯文本的命令行UI库。DUI库不仅能够在各平台上运行,还在Windows上表现出色。本文将详细介绍DUI库的技术背景、功能特性、使用方法以及未来的发展方向。
技术背景
DUI库的设计初衷是为了简化命令行工具的开发,同时提供一种轻量级的UI解决方案。相比于传统的GUI库(如Tkinter或PyQt),DUI库专注于纯文本界面的构建,避免了图形库的依赖和兼容性问题。DUI库的核心技术包括:
- 纯文本渲染:通过字符和符号构建界面,确保跨平台兼容性。
- 事件监听机制:支持键盘输入和按钮点击事件的监听,实现交互功能。
- 模块化设计:将界面元素(如窗口、按钮、文本)抽象为独立的模块,便于扩展和复用。
功能特性
DUI库提供了以下核心功能:
- 窗口管理:支持多窗口切换,每个窗口可以包含多个控件(如按钮、文本)。
- 按钮交互:通过键盘输入触发按钮点击事件,实现用户交互。
- 动态更新:界面内容可以根据用户输入动态更新,例如在猜数游戏中实时反馈猜测结果。
- 跨平台支持:DUI库在Windows、Linux和macOS上均可运行,无需额外配置。
快速使用
- 从Github上直接clone
git clone https://github.com/Python-Lettle/DUI
- 使用pip安装
pip install DUI
安装完成后,只需导入DUI库并按照文档编写代码即可快速构建命令行界面。
示例:猜数游戏
进入程序后首先是游戏首页: 不只是一个界面,它还能有更多功能:按钮。比如我们现在输入
"y"
就能点击当前选中的“开始游戏”
按钮: 这样我们开始了猜数游戏。老规矩,从0开始猜:
界面会自动出现一个文字信息,告诉我们不是0,那我们接着猜下去,这次比较幸运,猜到2就成功了,这时我们来到了成功的界面:
简单的猜数游戏界面能如此漂亮,这多亏了我们的DUI库。使用DUI库,获得这样的界面仅需几行优雅的代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#__author__ = "Lettle"
#QQ: 1071445082
#fileName: guess.py
'''
DUI使用案例: 猜数游戏
游戏将从0到10随机抽取一个数字, 用户输入数字, 系统会提示是否正确
游戏有3个界面:主界面、游戏界面、结束界面
DUI控件使用:
Frame
Window * 3
Listener
Text
Button
'''
from DUI import *
from random import randint
def mainW():
frame.showWindow(0)
def guess():
an = randint(0,10)
gameWindow.showWindow()
while True:
txt = listen.getText()
try:
res = int(txt)
except:
continue
if res == an:
gameWindow.updateWidget(4, Text())
frame.addWindow(gameWindow, 1)
frame.showWindow(2)
frame.listener.run()
return
else:
gameWindow.updateWidget(4, Text("猜错了!不是"+str(res)))
frame.addWindow(gameWindow, 1)
frame.showWindow(1)
frame = Frame()
#主界面
mainWindow = Window("主界面")
mainWindow.addWidget(2, Text("猜数游戏", 1))
mainWindow.addWidget(5, Button("开始游戏", onClick=guess))
mainWindow.addWidget(6, Button("结束游戏", onClick=quit))
frame.addWindow(mainWindow, 0)
#游戏界面
gameWindow = Window("猜数界面")
gameWindow.addWidget(2, Text("猜猜随机出来的是几(0-10)"))
gameWindow.addWidget(4, Text())
frame.addWindow(gameWindow, 1)
#游戏结束界面
overWindow = Window("猜数成功!")
overWindow.addWidget(2, Text("恭喜你猜对了!", 1))
overWindow.addWidget(5, Button("返回主界面", onClick=mainW))
frame.addWindow(overWindow, 2)
#设置监听器
listen = Listener(0)
dict = \
{
"quit": quit,
"w": mainWindow.up,
"s": mainWindow.down,
"y": listen.confirm
}
listen.setDict(dict)
frame.setListener(listen)
#主程序开始
t = time.time()
frame.showWindow(0)
frame.listener.run()
结语
DUI库的未来计划包括:
- 支持更多控件:如表单、列表、进度条等。
- 增强事件处理:支持更多输入设备和事件类型。
- 优化性能:减少资源占用,提升渲染效率。
扩展文档和示例:提供更多使用案例和教程,帮助开发者快速上手。
DUI库是一个轻量级、跨平台的命令行UI库,旨在简化命令行工具的开发。通过纯文本界面和模块化设计,DUI库为开发者提供了一种全新的UI解决方案。如果你对DUI库感兴趣,欢迎访问GitHub仓库或加入QQ交流群(540717901)了解更多信息。
希望这篇博客能帮助你更好地了解DUI库,也期待你的反馈与贡献!