自己熟悉一下,算是一个很小的工具,写着玩

import tkinter as tk
import tkinter.filedialog
import tkinter.messagebox as mb
import webbrowser


class RosDecrypt(object):
    file_lists = []
    name = ''
    pwd = ''

    def __init__(self):

        self.root = tk.Tk()
        # 获取当前屏幕长宽
        screenwidth = self.root.winfo_screenwidth()
        screenheight = self.root.winfo_screenheight()
        # 设定窗口的大小(长 * 宽)
        width = 240
        height = 180
        # 设置窗口在屏幕居中
        size = "%dx%d+%d+%d" % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
        self.root.geometry(size)

        varName = tk.StringVar()
        varName.set('')
        varPwd = tk.StringVar()
        varPwd.set('')
        # 创建标签
        labelName = tk.Label(self.root, text='用户名:', justify=tkinter.RIGHT, width=80)
        # 将标签放到窗口上
        labelName.place(x=25, y=25, width=80, height=20)
        # 创建文本框,同时设置关联的变量
        self.entryName = tk.Entry(self.root, width=80, textvariable=varName)
        self.entryName.insert('end', 'xiaoradmin')
        self.entryName.place(x=100, y=25, width=80, height=20)
        labelPwd = tk.Label(self.root, text='密  码:', justify=tkinter.RIGHT, width=80)
        labelPwd.place(x=25, y=50, width=80, height=20)
        # 创建密码文本框
        self.entryPwd = tk.Entry(self.root, show='*', width=80, textvariable=varPwd)
        self.entryPwd.place(x=100, y=50, width=80, height=20)
        self.entryPwd.bind(sequence="<Key-Return>", func=self.login)
        buttonOk = tk.Button(self.root, text='登录')
        buttonOk.bind(sequence="<Button-1>", func=self.login)
        buttonOk.place(x=60, y=90, width=50, height=20)
        buttonCancel = tk.Button(self.root, text='取消', command=self.root.quit)
        buttonCancel.place(x=120, y=90, width=50, height=20)
        # 启动消息循环
        self.root.mainloop()

    # 登录按钮事件处理函数
    def login(self, str):
        # 获取用户名和密码
        name = self.entryName.get()
        pwd = self.entryPwd.get()

        if name == 'xiaoradmin' and pwd == '1234567888':
            self.root.withdraw()
            self.Main()

        else:
            tkinter.messagebox.showerror('Error', message='密码错误!')

    def Main(self):
        login_ui = tk.Tk()
        login_ui.title('深圳市小二极客科技有限公司')  # 给窗口设置标题 这里为空
        screenwidth = login_ui.winfo_screenwidth()
        screenheight = login_ui.winfo_screenheight()
        width = 350
        height = 350
        size = "%dx%d+%d+%d" % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
        login_ui.geometry(size)
        login_ui.maxsize(350, 350)
        # 创建组件
        top_label = tk.Label(login_ui, text='ROS解密工具', font=('黑体', 15), width=40,
                             height=2)
        self.entey_int = tk.Entry(login_ui, bg='white', font=('黑体', 12))
        self.entey_int.place(width=133, height=20)
        self.text = tk.Text(login_ui, width=16, height=1, font=('黑体', 12))
        label_query = tk.Label(login_ui, text='输入SN查询', width=9)
        bottom_label_1 = tk.Label(login_ui, text='用心做好车 天生为创客', font=('黑体', 10), width=40, height=1)
        button_write = tk.Button(login_ui, text="文件模式")
        button_write.bind(sequence="<Button-1>", func=self.rasp_write)
        button_help = tk.Button(login_ui, text="  帮助  ")
        button_help.bind(sequence="<Button-1>", func=self.help)
        button_exit = tk.Button(login_ui, text="  退出  ", command=login_ui.quit)
        button_query = tk.Button(login_ui, text="手动模式", command=self.query)
        # button_query.bind(sequence="<Button-1>", func=self.query)

        top_label.place(x=-25, y=0)
        label_query.place(x=190, y=60)
        self.entey_int.place(x=150, y=90)
        self.text.place(x=150, y=110)
        button_query.place(x=185, y=140)
        bottom_label_1.place(x=130, y=330)
        button_write.place(x=15, y=95)
        button_help.place(x=240, y=205)
        button_exit.place(x=15, y=205)
        login_ui.mainloop()

    # 查询函数
    @staticmethod
    def query(self):
        txt = self.entey_int.get()
        if len(txt) != 8:
            self.numbe_Error()
        else:
            str_num = RosDecrypt.author(txt)
            print(str_num)
            self.entey_int.delete(0, "end")
            self.text.insert('end', str_num)
            return str_num

    # 文件模式界面
    def rasp_write(self, str):
        write_ui = tk.Tk()
        write_ui.title('文件模式')
        # 设置界面最小且屏幕居中
        screenwidth = write_ui.winfo_screenwidth()
        screenheight = write_ui.winfo_screenheight()
        width = 350
        height = 350
        size = "%dx%d+%d+%d" % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
        write_ui.geometry(size)

        top_label = tk.Label(write_ui, text='请点下方按钮进行写入或生成!', font=('黑体', 12))
        top_label2 = tk.Label(write_ui, text='请选择插入SD卡根目录中的sn文件!', font=('黑体', 12))
        button_choose = tk.Button(write_ui, text=" 请选择sn文件 ", font=('黑体', 12))
        button_choose.bind(sequence="<Button-1>", func=self.choose_file)
        self.label_info = tk.Label(write_ui, width=40, height=25, text='', anchor='nw', font=('黑体', 10), justify='left')

        top_label.place(x=30, y=15)
        top_label2.place(x=30, y=45)
        self.label_info.place(x=30, y=105)
        button_choose.place(x=85, y=75)

        write_ui.attributes("-topmost", True)
        write_ui.mainloop()

    # 帮助文档窗口
    def help(self, str):
        win = tk.Tk()
        win.title("help")

        screenwidth = win.winfo_screenwidth()
        screenheight = win.winfo_screenheight()
        width = 350
        height = 350
        size = "%dx%d+%d+%d" % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
        win.geometry(size)
        win.maxsize(350, 350)

        top_label = tk.Label(win, text='使用说明', font=('黑体', 14), width=40,
                             height=2)
        bottom_label_1 = tk.Label(win, text='用心做好车 天生为创客', font=('黑体', 10), width=40, height=1)

        text = tk.Text(win, width=35, height=9, font=('微软雅黑', 13))
        button_help = tk.Button(win, text=" 还不明白点我 ")
        button_help.place(x=120, y=280)
        button_help.bind("<Button-1>", self.open_url)
        text.place(x=20, y=70)
        str_help = '树莓派解密步骤:\n    点击文件模式后,请直接选择插入内存卡中boot文件夹里的sn文件即可\n\nJetson Nano解密步骤:\n' \
                   '    点击文件模式前,请把Jetson Nano中的xiaor文件夹里的sn文件拖入win桌面后再点击文件模式,选择sn文件后会生成一个author文件,拖回xiaor文件夹里覆盖即可'
        text.insert(tk.INSERT, str_help)

        top_label.place(x=-5, y=0)
        bottom_label_1.place(x=134, y=330)
        text.place(x=0, y=50)

        win.mainloop()

    def open_url(self, event):
        webbrowser.open("", new=0)

    # 文件选择函数
    def choose_file(self, str):
        self.file_lists.append('您选择的文件是:')
        # 弹出弹窗让用户选择文件
        path = tkinter.filedialog.askopenfilename(title='选择sn文件后自动烧录')
        try:
            # 第一种情况:选择的不是SN文件
            if path[-2:] != 'sn':
                self.file_lists.append('错误选择!')
                self.file_lists.append(path)
                self.label_info['text'] = '\n'.join(self.file_lists)
                self.choose_Error()
            # 第二种情况:SN为初始值
            if path[-2:] == 'sn':
                with open(path, 'r') as files:
                    str_num = files.read()
                if str_num == '2d27572e':
                    self.not_Use()
                else:
                    self.file_lists.append(path)
                    self.label_info['text'] = '\n'.join(self.file_lists)
                    way = path[:-3] + '/author'
                    write_num = RosDecrypt.author(str_num)
                    with open(way, 'w') as f:
                        f.write(write_num)
                    self.file_lists.append('写入值为:' + write_num)
                    self.file_lists.append('write successful!!!\n请拔出内存卡')
                    self.label_info['text'] = '\n'.join(self.file_lists)
        except Warning:
            self.unknown_Error()

    # 错误信息窗口
    def choose_Error(self):
        message = tkinter.Tk()
        # 调用withdraw(),让对象不可见
        message.withdraw()
        mb.showinfo('Error', '请选择正确的文件!')

    # 未知错误
    def unknown_Error(self):
        message = tkinter.Tk()
        # 调用withdraw(),让对象不可见
        message.withdraw()
        mb.showinfo('Error', '未知错误!')

    # 内存卡错误信息窗口
    def not_Use(self):
        message = tkinter.Tk()
        # 调用withdraw(),让对象不可见
        message.withdraw()
        mb.showinfo('Error', '内存卡未使用!')

    # 字符长度错误
    def numbe_Error(self):
        message = tkinter.Tk()
        # 调用withdraw(),让对象不可见
        message.withdraw()
        mb.showinfo('Error', '输入的字符长度不为8!')

    # 加密算法
    @staticmethod
    def author(xin):
        y = xin + 2
        return y


file_write = RosDecrypt()