tkinter-TinUI-xml实战(4)注册码

本文档展示了如何使用Tkinter和TinUI构建一个简单的注册码验证界面。通过读取本地文本文件中的用户信息,用户输入账户和注册码,程序会检查注册码的正确性。虽然例子中并未涉及加密和解密算法,但强调了在实际应用中应使用服务器存储用户数据并采用加密措施。
摘要由CSDN通过智能技术生成

引言

有一些软件,开发者希望能够绑定硬件和指定用户,或者是区分普通用户和重要开发者账户,以此来调整程序内的使用功能。这个时候就需要使用的注册码这一个玩意了。

当然,我这次不会使用服务器文件,只是做一个小模板。因为本次使用本地示例,所以就来写一个登陆界面。

声明

本项目属于作者原创。所有加密和解密算法请使用你自己的算法,本文章只是提供参考思路,不做赘述。如果想要运用到实践当中,请使用服务器文件存放注册码。

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

文件结构

本次使用的文件结构如下:

在这里插入图片描述

  • accs.txt - 用户信息
  • main.xml - 主界面
  • tinui.py - TinUI界面核心支持
  • 注册码.py - 本次项目文件

accs.txt中的内容:

{'用户': '注册码', '测试': 'a9ab5617-862d-11ec-9aae-8ab1c0ba58e3'}

再次声明:accs.txt之类的用户信息文件应当储存在服务器上,而且其中的内容也不应该如此简单。

编写界面(main.xml)

登陆界面只有两个输入框和一个确定按钮,这次连注册按钮都没写😭。

以下是main.xml的内容:

<!--tkinter注册码模板-->
<!--tkinter注册码模板-->
<tinui>
    <line>
    	<label text='账户号'></label>
        <entry text='' width='350'>acc</entry>
    </line>
    <line>
    	<label text='注册码'></label>
        <entry text='' width='350'>pwd</entry>
    </line>
    <line>
        <button text='确定' command='self.funcs["go"]'></button>
        <link text='忘记注册码?' url='help'></link>
        <link text='注册码是什么?' url='about'></link>
    </line>
    <line>
        <label text='' outline=''>state</label>
    </line>
</tinui>

其中每一个输入框都默认显示了输入的内容。此外,还有一个标签label作为信息展示的组件。

编写TinUIXml-IDO

#=====IDO=====
u=BasicTinUI(root)
u.pack(fill='both',expand=True,padx=5)
x=TinUIXml(u)
#in
x.funcs['go']=go
#during
with open('main.xml',mode='r',encoding='utf-8') as f:
    xml=f.read()
x.loadxml(xml)
#out
acc=x.tags['acc'][0]
pwd=x.tags['pwd'][0]
state=x.tags['state'][0]

完整代码

登录界面写的比较简单,还可以继续完善。

from tkinter import Tk
import uuid
from tinui import *
'''逻辑
用户输入用户名、注册码
用户名存在:判断注册码是否正确
用户名不存在:
    注册码已填写:输出错误
    注册码未填写:创建新用户与注册码
'''


with open('accs.txt',mode='r',encoding='utf-8') as f:#正常来说应该从自己的服务器上获取用户信息
    accs=eval(f.read())#dict

def write(w):
    u.itemconfig(state,text=w)

def go(event):
    name=acc.get()
    if name=='':
        write('用户名不能为空')
        return
    passw=pwd.get()
    if name not in accs.keys():
        if passw=='':#没有填写密码才创建密码
            new=str(uuid.uuid1())
            accs[name]=new
            with open('accs.txt',mode='w',encoding='utf-8') as f:
                #进阶版(服务器版)中不存在客户端注册码注册
                #这里只是示范服务端使用uuid创建注册码
                f.write(str(accs))
            write('已经为新用户创建注册码:\n'+new)
        else:
            write('不存在该用户,请不要填写注册码')
    else:
        if passw==accs[name]:
            write('注册码正确')
        else:
            write('注册码错误')


root=Tk()
root.geometry('470x180')
root.title('tkinter注册码模板')

u=BasicTinUI(root)
u.pack(fill='both',expand=True,padx=5)
x=TinUIXml(u)
#in
x.funcs['go']=go
#during
with open('main.xml',mode='r',encoding='utf-8') as f:
    xml=f.read()
x.loadxml(xml)
#out
acc=x.tags['acc'][0]
pwd=x.tags['pwd'][0]
state=x.tags['state'][0]

root.mainloop()

代码中去掉了加密和解密算法,因为本次示例项目不需要。

实际运用中还是要使用服务器文件和加密算法。

效果

在这里插入图片描述


结语

这次写的界面太简单了,下一次写一个比成语接龙界面更加“复杂”又实用的,也就是自动完成TinUIXml预览、IDO部分代码生成的TinUIXml前期编辑器。

题外话:目前,TinUI正在实现绘制滚动条。好多视觉和响应效果啊,好难啊,而且计算变量又多,还有双向绑定,这不比表格还难画。但我必定可以绘制出滚动条,从而扩大listbox和textbox等组件。

🔆tkinter创新🔆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值