python端tkinter界面框架调研

0.前言

项目中使用python做近红外建模算法时,建模参数需要查看数据的谱图特征和相关系数才能判断,需要配置GUI交互界面。所需要的界面复杂度不高,且要求在Linux嵌入式设备上可以运行。这就需一款轻量化、具备基本功能的GUI框架。

1.框架调研

先后调研了pyqt5和tkinter两个gui框架,PyQt5是绑定Python的Qt应用程序框架。PyQt5支持Windows、Linux、UNIX、Android、MacOS和iOS平台。但是pyqt5的学习成本较高,依赖较多,打包后体积较大。Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Qt是一组C++库和开发工具,包括平台独立抽象图形用户接口、网络、线程、正则表达式、SQL数据库、SVG、OpenGL、XML、用户和应用程序设置、定位和定位服务、短程通信(NFC和蓝牙)、上网、3D动画、图表、3D数据可视化和应用商店接口。这些功能由1000多个类实现,这些类被封装成一组模块。
Tkinter是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。Tkinter 编写的程序,也称为 GUI 程序,GUI (Graphical User Interface)指的是“图形用户界面”,它是计算机图形学(CG)的一门分支,主要研究如何在计算机中表示图形,以及利用计算机进行图形的计算、处理和显示等相关工作。tkinter框架简单,具有基本的控件,很适合从C#的winform过渡过来。而且时python自带的UI库,没有任何依赖,跨平台性也是可以保证。通常情况下不会使用 Tkinter 来开发较为复杂的桌面应用程序,这是由 Python 语言自身特点决定的,作为一种解释型语言和脚本语言,Python 并不具备开发复杂桌面应用的优势。

2.创建界面

class Win(tk.Tk):

    def __init__(self):
        super().__init__()
        self.title("建模软件")
        self.iconbitmap('Fpi.ico')
        # win.resizable(0,0)
        btn_w = 10
        padx = 5
        pady = 2
        tk.Button(self, text="打开文件", width=btn_w, command=self.open_file).grid(row=0, column=0, padx=padx, pady=pady)

        self.cmb_factor = ttk.Combobox(self, width=8)
        self.cmb_factor.grid(row=1, column=0, padx=padx, pady=pady)

        tk.Button(self, text="配置建模", width=btn_w, command=self.config_modeling).grid(row=2, column=0, padx=padx,
                                                                                     pady=pady)
        tk.Button(self, text="开始建模", width=btn_w, command=self.start_modeling).grid(row=3, column=0, padx=padx,
                                                                                    pady=pady)
        tk.Button(self, text="保存模型", width=btn_w, command=self.save_model).grid(row=4, column=0, padx=padx, pady=pady)
        tk.Button(self, text="样本预测", width=btn_w, command=self.predict_sample).grid(row=5, column=0, padx=padx,
                                                                                    pady=pady)
        self.txt_log = Text(self, width=120, height=40, undo=True, autoseparators=False)
        self.txt_log.grid(row=0, rowspan=6, column=1, padx=10, pady=5)
        # self.geometry('750x420')
        self.config = None
        self.__init_menu()

绑定右键下拉框

    def __init_menu(self):
        # 创建一个弹出菜单
        menu = tk.Menu(self, tearoff=False)
        menu.add_command(label="导出", command=self.export)
        menu.add_command(label="清空", command=lambda: self.txt_log.delete('1.0', tk.END))
        self.txt_log.bind('<Button-3>', lambda event: menu.post(event.x_root, event.y_root))

文件操作

    def open_file(self):
        # 从本地选择一个文件,并返回文件的目录
        filename = filedialog.askopenfilename(filetypes=[('CSV', '*.csv')], initialdir=os.curdir)
        if filename != '':
            self.xy_data = csv_util.read_XYData(filename)
            self.log(f'读取样品集成功{str(self.xy_data)}')
            self.cmb_factor['value'] = tuple(self.xy_data.factors)
            self.cmb_factor.current(0)

子窗体,需要集成TopLevel

class ConfigWin(Toplevel):
    def __init__(self,xy_data:XYData,master):
        Toplevel.__init__(self,master=master)
        # self.btn = tkinter.Button(master=self, text="Quit", command=self.update_frequency)
        # self.btn.pack(side=tkinter.BOTTOM)
        self.config = ModelConfig()
        self.__init_ui(row_start=2)
        self.title("Embedding in Tk")
        self.fig=self.__init_plot()
        self.__plt_sample(xy_data)
        # self.__plt_sample(xy_data)
        self.xy_data=xy_data
        # self.update_frequency()
        self.geometry('850x750')
        # self.mainloop()

打开子窗体,并等待操作结束

ui_config = ConfigWin(self.xy_data.get_match(self.cmb_factor.get()), self)
ui_config.wait_window()

2.总结

tkinter创建界面较简单,可以配合matplotlib显示精美图表。算法开发人员掌握此框架便可以开发出具有交互性的算法界面,方便研究人员调试和提升算法人员软件开发技能。百度搜索的结果可能大部分都推荐pyqt,pyqt虽然可以做出精美界面,但是依赖较多,打包后体积较大,另外学习成本也比较高,对于初学者,tkinter更适合快速做出简洁的界面。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值