python如何打开tkinter(PythontkinterGUI的几种写法及比较)

自学python’编程,做点笔记,分享体会。

一、学编程为什么要搞GUI?

不搞GUI,编程就是花拳绣腿。不从搞项目的角度去考虑编程思路永远都是耍流氓。你是报班学习,你会发现你花了大把银子,学了很多基础知识,甚至是提高班,掌握了很多库,但真正想搞项目的时候仍然一筹莫展。想过没有,你写个爬虫,难道会让用户在控制台下运行?没点交互,你好意思跟用户交付?当然大厂除外,那都是流水线作业,你只需管你那颗螺丝钉。

二、Python搞GUI为什么要选Tkinter?

常用的库无非就是tkinter, wxPython, pyQt,很多人都觉得tkinter丑陋,好多大牛都推崇pyQt。个人觉得,pyQt页面布局一时爽,当你修改界面,代码又要重新转换,涉及复杂的数据交互绝对让人崩溃。反而,tkinter 是 Python 的标准 GUI 接口,程序员控制起来随时可以做到心中有数,一样也可以做出外观上乘的界面,比如ttkbootstrap库。

python如何打开tkinter(PythontkinterGUI的几种写法及比较)(1)

三、几种写法1.逻辑写法

就是按程序执行的先后顺序从前到后写代码。

from tkinter import * root = Tk() root.title('万师兄') root.geometry('200x100 100 100') Button(root, text='确定').pack() Button(root, text='取消').pack() root.mainloop()

python如何打开tkinter(PythontkinterGUI的几种写法及比较)(2)

就三步就可以创建一个GUI了,1创建Tk对象,2添加控件,3给个mainloop循环。这种写法的好处就是前后逻辑比较好理解,比较适合初学者掌握库的使用逻辑,不利之处就是不好复用。

2.类的写法

Python里,一切都是对象,因此,可以用类将窗口封装起来,便于扩展、重构等。

from tkinter import * class Myapp(Frame): def __init__(self, master): super().__init__() self.master = master self.pack() self.createWidget() def createWidget(self): Button(self, text='确定').pack() Button(self, text='取消').pack() if __name__ == '__main__': root = Tk() root.title('万师兄') root.geometry('200x100 100 100') app = Myapp(master=root) app.mainloop()

这是一个大神的写法,其中还是有几个问题。1是主窗口if主程序中创建,需要进行必要的主窗口,还需要传递一个master参数,表明Myapp类的依附对象,比较麻烦,容易犯错。另外,如果程序涉及多个窗口时,这种写法就不好管理了,除了创建新的窗口类之外,还得在if主程序中创建新的窗口,略显重复臃肿。需要注意,Myapp类继承的是Frame类,初始化里面必须要自己pack()一下。很多很牛的python课程里都可能只讲单窗口的案例,

3.完全封装

将一个窗口所有内容全部封装到一个类中。

from tkinter import * class Myapp(Tk): def __init__(self): super().__init__() self.title('万师兄') self.geometry('200x100 100 100') self.createWidget() def createWidget(self): Button(self, text='确定').pack() Button(self, text='取消').pack() if __name__ == '__main__': app = Myapp() app.mainloop()

这样,无论你有多少窗口,结构都十分清晰,主程序简简单单,顿时神清气爽。

这些问题都是小问题,可能很多根本不会引人注意,但你思考得越深,境界越高。


我自学python,致力于掌握和研究爬虫、机器视觉和人工智能三个方向,欢迎指正交流。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页