tkinter-TinUI-xml实战(2)成语接龙
引言
使用TinUIXml来为TinUI编写界面,大大缩减了调试时间,也为创建复杂界面提供了较大的可能。在这里,开始创建第二个项目——成语接龙。
成语接龙代码量较大,这里只着重说明TinUIXml部分。
声明
本项目功能代码初版为网络搜索项目,具体作者不详。功能代码部分已经被我做大幅更改,属于我的原创内容。
本项目需额外使用pypinyin
库。本项目使用的TinUI为我开源并维护在GitHub上的主文件——TinUI.py。当然,使用PYPI中下载安装的tinui也可以。
文件结构
本次项目使用的文件结构如下:
- 模块文档 - 词库文件
- new_ciku.txt - 新增词库
- szck1.txt - 词库1
- szck2.txt - 词库2
- 私有词库.txt - 个人词库
- mylogo.ico - 图标文件
- tinui.py - TinUI界面核心支持
- ui.xml - 主界面
- 成语接龙.py - 本次项目文件
编写界面(ui.xml)
在TinUIXml的介绍一文里,出现了成语接龙界面。那一个界面模板就是我们马上要编写的界面效果,分为三个部分:
- 显示与输入框
- 主要的两个操作按钮:确定、退出
- 辅助功能按钮
以下是ui.xml的内容:
<tinui>
<line x='512'>
<label text='输入一个成语开始游戏:' font='宋体 48' outline='#f0f0f0' anchor='n'>tlabel</label>
</line>
<line x='10'>
<entry width='940' fg='blue' activebg='powderblue' font='微软雅黑 64'>entry</entry>
</line>
<line x='512'>
<button text='确认成语' font='宋体 32' fg='cyan' command='self.funcs["findword"]' anchor='n'></button>
</line>
<line x='512'>
<button text='失败退出' font='宋体 32' fg='red' command='self.funcs["closewindow"]' anchor='n'></button>
</line>
<line x='70'>
<button text='关于编写' font='宋体 18' command='self.funcs["gybx"]'></button>
<button text='版本说明' font='宋体 18' command='self.funcs["bbsm"]'></button>
<button text='词库信息' font='宋体 18' command='self.funcs["ckxx"]'></button>
<button text='词库输入' font='宋体 18' command='self.funcs["cksr"]'>cy-input</button>
<button text='成语查询' font='宋体 18' command='self.funcs["check_web"]'>cy-web</button>
<button text='检测帮助' font='宋体 18' command='self.funcs["find_chengyu"]'>cy-help</button>
<button text='添加词库' font='宋体 18' command='self.funcs["find_newciku"]'></button>
<button text='开源项目' font='宋体 18' command='self.funcs["find_kaiyuan"]'></button>
</line>
</tinui>
编写TinUIXml-IDO
这是第一次出现TinUIXml-IDO
这个词,在TinUIXml的介绍文档里面没有提到。这个世界上就是将TinUIXml融入Python的三个过程:in, during以及out。以后我会继续使用这个简写。
由于篇幅限制以及主题选择,这里不会给出完整代码。但先别着急,我们先来完成界面编写。
#I(n)D(uring)O(ut)
#=====TinUI界面
mainu=BasicTinUI(root)
with open('ui.xml',encoding='utf-8',mode='r') as f:
xml=f.read()
xui=TinUIXml(mainu)
mainu.pack()
#=====获取接口-in
if os==0:
findtime_max=50
findword=findword_0
elif os==1:
findtime_max=10
findword=findword_1
elif os==2:
findtime_max=5
findword=findword_2
xui.funcs['findword']=findword
xui.funcs['closewindow']=closewindow
xui.funcs['gybx']=gybx
xui.funcs['bbsm']=bbsm
xui.funcs['ckxx']=ckxx
xui.funcs['cksr']=cksr
xui.funcs['check_web']=check_web
xui.funcs['find_chengyu']=find_chengyu
xui.funcs['find_newciku']=find_newciku
xui.funcs['find_kaiyuan']=find_kaiyuan
#=====渲染界面-during
xui.loadxml(xml)
x1,y1,x2,y2=mainu.bbox('all')
mainu['width']=x2-x1+50
mainu['height']=y2-y1
#=====输出接口-out
MyEntry=xui.tags['entry'][0]
vlabel=xui.tags['tlabel'][0]
cy_input=xui.tags['cy-input'][2]
cy_web=xui.tags['cy-web'][2]
cy_help=xui.tags['cy-help'][2]
#==========
完整代码
项目代码量不适合放在博客里。
这个成语接龙有以下特性:
- 可选三种难度(简单、严格、多元)
- 严格模式会狭义匹配最后一个字,并且任何一个难度都不是单一套路
- 多元模式允许同字或同音
- 能够提供词库帮助(有次数限制)
- 可以自定义词库
- 可以输入新词库
- 可以查询成语
- ……
所以,实现以上功能需要实现较多的代码。
这个项目并不是一直在维护,只是放在了GitHub上,供大家翻阅参考。
GitHub::tkinter-chengyujielong项目地址。
效果
可以看到,在这个游戏(严格-多元模式)当中,既可以同字,也可以同音,而且还不只有四字成语。很好玩。
简单对应简答模式,普通对应严格模式,严格对应多元模式
结语
这是使用tkinter和TinUI实现了一个游戏程序,当然,还可以在现有界面和词库上增加更多的成语小游戏:
- 九宫格选词拼成语
- AI成语接龙
- ……
🔆tkinter创新🔆