Python GUI 的几种写法¶
逻辑写法¶
就是按程序执行的先后顺序从前到后写代码。
from tkinter import *
root = Tk()
root.title('张彬彬')
root.geometry('200x100+100+100')
Button(root, text='确定').pack()
Button(root, text='取消').pack()
root.mainloop()
就三步就可以创建一个 GUI 了,1创建Tk对象,2添加控件,3给个 mainloop 循环。这种写法的好处就是前后逻辑比较好理解,比较适合初学者掌握库的使用逻辑,不利之处就是不好复用。
类的写法¶
Python里,一切都是对象,因此,可以用类将窗口封装起来,便于扩展、重构等。
from tkinter import *
class Myapp(Frame):
def __init__(self, master):
super().__init__()
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
Button(root, text='确定').pack()
Button(root, text='取消').pack()
if __name__ == '__main__':
root = Tk()
root.title('张彬彬')
root.geometry('200x100+100+100')
app = Myapp(master=root)
app.mainloop()
采用了面向对象的方式, 通过类 Application 组织整个 GUI 程序, 类 Application 继承了父类的特性, 通过 init() 初始化窗口中的对象, 通过 createWidgets() 方法创建窗口中的对象。
Frame 框架是一个 tkinter 组件, 表示一个矩形区域。 Frame 通常作为容器使用, 可以放置其他组件, 从而实现复杂的布局。
from tkinter import *
from tkinter import messagebox
class Application(Frame):
"""一个经典的GUI程序类写法"""
def __init__(self, master=None):
super().__init__(master) # super代表的是父类的定义,而不是父类的对象
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
"""创建组件"""
self.btn01 = Button(self)
self.btn01['text'] = "点击送花"
self.btn01.pack()
self.btn01["command"] = self.songhua
self.btnQuit = Button(self, text='退出', command=self.destroy)
self.btnQuit.pack()
def songhua(self):
messagebox.showinfo('送花', '送你99朵玫瑰花')
root = Tk()
root.geometry("400x100+200+300")
root.title('测试')
app = Application(master=root)
root.mainloop()
完全封装¶
将一个窗口所有内容全部封装到一个类中。
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()
这些问题都是小问题,可能很多根本不会引人注意,但你思考得越深,境界越高。