MENU

基于Tkinter实现的GUI开发思路与历程

• September 8, 2021 • Read: 2542 • Python

采用Tkinter模块进行代码的可视化开发的好处在于,第一,Tkinter是python自带的GUI库,精简、执行效率高,耗费资源小,第二,由于python本身是一个标准的编程语言,其能够适应多种系统平台,因此,采用Tkinter进行GUI的开发,能够保证在Window、Linux以及Macos上正常运行,且几乎不需要进行大的源代码变动。
目前,主要采用的是Python进行科学计算以及分析和数据的可视化。在研究问题的初期,并不会以开发GUI程序作为主要的目标,主要是以解决科学问题为导向的,因此,在初始阶段,编程的实现主要是以面向对象的范式实现的算法开发,是以Python模块或者库的形式来进行的。后续如果需要开发成软件,那么需要依据前期的源代码进行软件的GUI实现,但是模块或者库形式的代码往往需要进行一些特定的修改采能实现GUI框架的良好对接。因此,记录一个问题从最初的算法开发到最终的程序是必要的。

算法的编程实现

这里主要针对问题是物理场的计算或者某一问题的具体方法的实现,因此,在最初的编程实现中并不会考虑GUI的一些特性,而设置特定的接口。Python实现的数值方法过程中,这里主要以面向对象的范式进行,通常问题计算所需要的一些参数往往设置为类的属性,一些关键的步骤或者中间量的计算会封装为对象的方法,从而完成计算。通常,对于一些单一的物理场问题,结果的可视化直接封装在类的内部,以对象方法的形式存在,使用起来较为方便。在这一过程中,主要以Python的语言特性进行数值方法的编程实现,一般来说没有必要考虑后续的GUI相关的一些要求或者特点。

GUI框架的建立

在这里,GUI开发的本质实际上就是算法代码的一个算例的演示运行,当然需要解决好一些参数输入方面的问题。GUI开发时,这一步只需要进行界面的开发。这里仍然采用OOP的范式进行,比较习构建一个Tk()的子类,然后通过类方法的设置实现一些控件生成,这样的思路比较清晰,对于软件各个功能区有着明确的区分,代码较为容易看懂。这一步不需要特别地关注算法方面的问题,只需要开发相应的界面即可。

算法Src到GUI的转化过程

当整个GUI界面框架搭建完毕后,得到只是一个空的壳子,只能看,不能够执行任何任务。算法Src到GUI的转化过程,就是实现算法计算代码与GUI程序之间的连接。原始算法Src可以通过模块的形式进行import到GUI文件中,这样可以直接在GUI文件中,GUI的类中进行实例化。这里涉及到的最重要的控件就是Entry与Button,这两个控件。Entry控件要实现类实例化时所需要的属性,由于科学计算主要涉及到的是浮点数或者整形变量,从Entry的输入中提取变量,就需要使用tkinter中的基中变量,DoubleVar()与IntVar。特别注意这两个是类,提取具体的value还需要使用这个对象的get()方法。Button控件用于执行算法的一些方法,因此,可以直接在GUI的类中,在属性后定义一些对象方法,这些方法和Button的command进行连接即可。一般而言,原始的Src到GUI连接过程中,并不需要调整什么,但是由于科学计算涉及到结果的可视化,所以原始的Src中一般都会直接让图形显示,即plt.show(),但是tkinter与matplotlib之间连接的过程中,往往需要更新GUI的Canvas控件,所以方法返回一个figure对象要更为合理和方便,所以只需要在这一块对Src进行一些调整即可。总的来说,这一步是GUI开发的关键,需要注意以下几点:

  1. Entry输入的数据的提取,该输入数值需要作为实例初始化的生成。
  2. Button控件的command设置时,要在界面代码之前,先定义出这个调用的函数,这个函数可以直接作为对象的一个方法存在,调用起来较为方便。
  3. tkinter与matplotlib之间连接的实现,在matplotlib的官方eg中有,可以进行参考。但是在实现过程中,要注意到Canvas的update。
Archives Tip
QR Code for this page
Tipping QR Code