选项菜单
这个选项菜单可以使用W和S移动,按Enter确定,就像日常使用的界面一样熟悉便捷。
这是如何做到的呢?其实很简单。
导入库
这个效果是使用conkits库,这个库的制作大佬我还认识。
from conkits import Choice
输入文案
新建一个列表,写上选项的文案,字符串类型:
from conkits import Choice
taxt = [ ‘选项A’, ‘选项B’ ]
调用函数
再新建一个列表,写上对应的函数名称,不需要加括号和引号。
from conkits import Choice
taxt = [ ‘选项A’, ‘选项B’ ] method = [ A, B ]
在这段代码中,如果用户选择选项A,那会运行A函数,以此类推。
创建函数
有函数名了,但是函数本身哪去了?没有?造一个!
from conkits import Choice
taxt = [ ‘选项A’, ‘选项B’ ] def A(): print(‘这是选项A’) def B(): print(‘这是选项B’) method = [ A, B ]
需要注意的是,函数必须要在调用函数的列表前面。
启动菜单
把菜单的灵魂加上,完美!
from conkits import Choice
taxt = [ ‘选项A’, ‘选项B’ ] def A(): print(‘这是选项A’) def B(): print(‘这是选项B’) method = [ A, B ] option = Choice(options = taxt, methods = method) option.run()
其中,变量option、taxt、method的名称都是可以改变的。Choice函数的参数定义如下:
options:菜单文案列表
methods:调用函数列表
优雅地为文字添加颜色
一般我们打印彩色文字时都这样写:
printf(“\033[1;30;43m每个月的零花钱:%d。\033[0m\n”, pocket) ; printf(“最低生活保障:%d。\n\n”, subsistenceAllowance) ; printf(“一个月可以买:\n”) ; printf(“\033[1m%d\033[0m 台 4000 元手机。\n”, phone) ; printf(“\033[1m%d\033[0m 台 8000 元电脑。\n”, computer) ; printf(“\033[1m%d\033[0m 款 300 元 3A 游戏。\n”, game) ; printf(“V \033[1m%d\033[0m 人 50 元。\n\n”, v50) ; printf(“输入\033[1m任意字符\033[0m关闭…”) ;
这是一段C语言的代码片段,本来C语言的语法就抽象,再加上传统的颜色控制码使这段代码更具欣赏价值。
不仅内行人看的头痛,外行人还以为是乱码。
但是Python就不用担心这种问题,rich库把我们从水深火热中拉了回来。
导入库
from rich import print
需要注意的是,这时候原版的print函数已经被rich接手了,实测在部分用途下一些功能无法正常使用,所以建议与原版区分开。
from rich import print as rprint
前景色
rich的语法与HTML类似。使用方括号表示一个标签,直接写在字符串里。
设置前景色,只需要在标签里面写颜色的名字就行了,比如说红色文字:
rprint(‘[red]Hello world![/red]‘)
背景色
使用[on <背景色名称>]可以设置背景色,比如说背景为青色的文字:
rprint(‘[on cyan]慧家智能家庭中枢[/on cyan]‘)
特殊样式
rich支持文字的特殊样式,比如加粗、斜体、删除线等,以下是一些样式:
bold:加粗
italic:斜体
underline:下划线
strikethrough:删除线
和颜色一样,只需要在标签里面写样式的名字就行了,比如说加粗文字:
rprint(‘[bold]这是一段重要的文字[/bold]‘)
组合
颜色和样式可以组合使用,并且无需打开多个标签,只需要在标签里面加空格:
rprint(‘[black on yellow bold underline]Pink OS未正确退出[/black on yellow bold underline]’)
前景色要放在背景色前面。
装逼功能
在终端输入这个命令试试看:
python -m rich
TUI
使用Textual构建TUI,之前已经有写教程了:Textual制作TUI界面 – Pinpe的云端
一些迷你代码
清屏
def cls(): print(‘\033[2J’) print(‘\033[1;1H’,end=”)
无限平台的清屏函数,无参数。
逐字打印文字
def dprint(string): for char in list(string): print(char, end=”, flush=True) time.sleep(0.05)
像RPG游戏一样逐字出现的文字,参数如下:
- string:想要打印的文字
光标控制
class cursor: def show(): print(‘\033[?25h’,end=”) def hide(): print(‘\033[?25l’,end=”)
控制光标的显示和隐藏,cursor.show()显示光标;cursor.hide()隐藏光标,无参数。
加载动画
def load(string,sum): timeflush=0.25 for i in range(0, int(sum/timeflush)): list = [”\”, ”|”, ”/”, ”—”] index = i % 4 print(“\r”+string+’ {}‘.format(list[index]),end=”) time.sleep(timeflush)
给加载加入旋转的线,让用户觉得没死机,参数如下:
string:加载提示文字
sum:加载时间
进度条
def bar(string1,string2,num): timeflush = 0.5 for i in range(0, int(num/timeflush)+1): print(“\r”+string1 + ”|” + "" * i + ” “(int(num/timeflush)+1-i)+”|” + str(i), end="") time.sleep(timeflush) print(“\r”+string2)
显示进度条,直观地表示进度,参数如下:
string1:加载提示文字
string2:完成提示文字
num:加载时间