tkinter-TinUI-xml实战(5)TinUIxml编辑器

2024-04-10 14:18

本文主要是介绍tkinter-TinUI-xml实战(5)TinUIxml编辑器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

tkinter-TinUI-xml实战(5)TinUIxml编辑器

  • 引言
  • 声明
  • 文件结构
  • 编写界面(main.xml)
  • 编写TinUIXml-IDO代码
  • 功能代码
    • 导入xml文本
    • 导出IDO代码
  • 完整代码
  • 效果
  • 结语

引言

TinUIXml推出有一段时间了,其中,最重要的部分无非就是以下两点:

  1. xml文件的调试

  2. IDO代码部分的编写

虽然相比于使用TinUI自身的布局系统,使用xml文件可以大大简化TinUI界面的调试编写,同时为程序的开发节约更多的时间。当然,我们还是需要通过每一次代码运行,来查看我们编写的xml文件是否符合我们自己的预期。

这不是说TinUI的原生布局没有用,TinUI的绝对布局有更大的灵活性,适合个别单体组件的布局使用。

另外,当界面复杂以后,IDO部分的代码也就随之复杂了。

综上,我们希望有一款既能够直接预览xml布局的界面,同时还能够为我们自动导出一定格式的IDO代码的TinUIXml编辑器。


声明

本项目属于作者原创。借鉴了GitHub/TinUI上的tuxml.py,翻版必究,但可以自行添加功能代码。

本项目使用的TinUI为我开源并维护在GitHub上的主文件——TinUI.py。当然,使用PYPI中下载安装的tinui也可以。


文件结构

在这里插入图片描述

  • main.xml - 主界面
  • tinui.py - TinUI界面核心支持
  • TinUIXml编辑器.py - 本次项目文件

编写界面(main.xml)

这次的界面虽然比之前复杂一点,但是我们还是可以做一下分析的。

  • 左侧分别为两个文本框

    • 左上角的文本框负责填写xml格式文本段

    • 左下角的文本框显示导出的IDO代码

  • 右上角显示两个按钮,分别为渲染TinUI界面、导出IDO代码

  • 右侧为预览的TinUI

依据以上分析,编写main.xml文件:

<!--TinUIXml编辑器-->
<tinui><line><line><textbox width='475' height='350' text='<!--TinUIXml UI界面布局-->' scrollbar='True'>xmltext</textbox></line><line><textbox width='475' height='350' text='#TinUIXml-IDO' scrollbar='True'>codetext</textbox></line><back></back><line x='510'><button text='xml导入' command='self.funcs["inxml"]'></button><button text='生成IDO代码' command='self.funcs["inido"]'></button></line></line>
</tinui>

编写TinUIXml-IDO代码

以下是通过本程序生成的IDO代码,但是IDO代码经过了一定更改,这也是本程序不可改变的后续人工步骤。

u=BasicTinUI(root)
u.pack(fill='both',expand=True)
x=TinUIXml(u)
#in
x.funcs['inxml']=inxml
x.funcs['inido']=inido
#during
with open('main.xml',mode='r',encoding='utf-8') as f:xml=f.read()
x.loadxml(xml)
#out
xmltext=x.tags['xmltext'][0]
xmltext.insert('end','\n')
codetext=x.tags['codetext'][0]
codetext.insert('end','\n# u=TinUI(root) ; x=TinUIXml(u) ; xml=file.read()\n')

功能代码

导入xml文本

def inxml(event):uixml=xmltext.get(1.0,'end')xui.funcs=dict()xui.datas=dict()xui.tags=dict()result=re.findall("self\.(.*?)\[.(.*?).\]'",uixml,re.M|re.S)for i in result:if i[0]=='funcs':xui.funcs[i[1]]=Noneelif i[0]=='datas':xui.datas[i[1]]=(None,None)xui.yendy=5xui.clean()xui.loadxml(uixml)return result

导出IDO代码

def inido(event):r=inxml(None)write('#in')for i in r:if i[0]=='funcs':write(f'x.funcs["{i[1]}"] = {i[1]}')elif i[0]=='datas':write(f'x.datas["{i[1]}"] = {i[1]}')write('#during')write('x.loadxml(xml)')write('#out')for tag in xui.tags.keys():write(f'{tag} = x.data["{tag}"]')

完整代码

这个编辑器只是雏形,但我不会再改进,请各自根据所需以此为参考添加功能。

from tinui import *
from tkinter import Tk
import redef write(text):codetext.insert('end',text+'\n')def inxml(event):uixml=xmltext.get(1.0,'end')xui.funcs=dict()xui.datas=dict()xui.tags=dict()result=re.findall("self\.(.*?)\[.(.*?).\]'",uixml,re.M|re.S)for i in result:if i[0]=='funcs':xui.funcs[i[1]]=Noneelif i[0]=='datas':xui.datas[i[1]]=(None,None)xui.yendy=5xui.clean()xui.loadxml(uixml)return resultdef inido(event):r=inxml(None)write('#in')for i in r:if i[0]=='funcs':write(f'x.funcs["{i[1]}"] = {i[1]}')elif i[0]=='datas':write(f'x.datas["{i[1]}"] = {i[1]}')write('#during')write('x.loadxml(xml)')write('#out')for tag in xui.tags.keys():write(f'{tag} = x.data["{tag}"]')root=Tk()
root.geometry('1280x720+5+5')
root.title('TinUIXml设计测试')u=BasicTinUI(root)
u.pack(fill='both',expand=True)
x=TinUIXml(u)
#in
x.funcs['inxml']=inxml
x.funcs['inido']=inido
#during
with open('main.xml',mode='r',encoding='utf-8') as f:xml=f.read()
x.loadxml(xml)
#out
xmltext=x.tags['xmltext'][0]
xmltext.insert('end','\n')
codetext=x.tags['codetext'][0]
codetext.insert('end','\n# u=TinUI(root) ; x=TinUIXml(u) ; xml=file.read()\n')ui=TinUI(u,width=730,height=650)
ui.place(x=520,y=40)
xui=TinUIXml(ui)root.mainloop()

效果

在这里插入图片描述

我到现在还在感谢自己为TinUI提供了滚动条的绘制代码,否则TinUI不会有自身的textbox控件,也不会有之后的视野可变类控件。


结语

拥有了半自动化的TinUIXml编辑器,TinUI的界面布局变得更加方便了。

将开源TinUI添加到自己的项目时要注意,TinUI使用了GPL开源协议,使用TinUI需要遵照协议内容和使用条款。

🔆tkinter创新🔆

这篇关于tkinter-TinUI-xml实战(5)TinUIxml编辑器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891292

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

intellij idea generatorConfig.xml

generatorConfig.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-ge

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***

Birt报表开发实战

我就截图描述得了,没什么含金量,看图基本明白的。 1.开始 a.创建报表文件 b.数据源配置 c.配置数据集 2.网格报表 拖拉式操作,很方便 3.预览效果 其他报表的操作也基本不难,就不扯了! 2.级联参数 官方视频教程:http://demo.actuate.com/demos/cascade/cascade.html

xml概论

以下内容摘录自W3School 一、XML的特性 xml是用来传输和存储数据的,本身对数据没有任何操作。在这里要区别一下html,html是用来显示数据的。xml的焦点是数据内容,html的焦点是数据外观。 下面是xml的定义: •XML 指可扩展标记语言(EXtensible Markup Language) •XML 是一种标记语言,很类似 HTML