共计 1889 个字符,预计需要花费 5 分钟才能阅读完成。
0. 引言
学 Python 这么久了,一直想做个界面出来,最近发现 Python 有个内置库 tkinter,利用它可以很轻松做出一些简易的 UI 界面,首先来看 Python 官方对 Tkinter 的说明:
The tkinter package (“Tk interface”) is the standard Python interface to the Tk GUI toolkit. Both Tk and tkinter are available on most Unix platforms, as well as on Windows systems.
从上面描述中我们不难看出,不管你是 Mac OS 系统,还是 Windows 系统,它都可以生成相对应的操作界面,这就是所谓的跨平台。
1. 调用关系说明
其原理就是我们使用 Python 代码去调用 Tkinter,Tkinter 已经封装了访问 TK 的接口,这个接口是一个图形库,支持多跨平台操作系统,进而通过它,我们就可以调用我们系统本身的 GUI 接口了。
2. 环境
操作系统:Windows / Linux / Mac OS
Python 版本:3.6.6
3. 小试牛刀
有了概念并了解原理之后,接下来就小试牛刀一下~
import tkinter
# 定义一个窗体
top = tkinter.Tk()
# 将其加入主循环
top.mainloop()
运行一下,biu~,三行代码就把一个窗口弹出来了,有没有很神奇~
4. 中试牛刀
接下来我们要来点复杂的:
import tkinter as tk
import tkinter.messagebox as mbox
# 定义 MainUI 类表示应用 / 窗口,继承 Frame 类
class MainUI(tk.Frame):
# Application 构造函数,master 为窗口的父控件
def __init__(self, master = None):
# 初始化 Application 的 Frame 部分
tk.Frame.__init__(self, master)
# 显示窗口,并使用 grid 布局
self.grid()
# 创建控件
self.createWidgets()
# 创建控件
def createWidgets(self):
# 创建一个标签,输出要显示的内容
self.firstLabel = tk.Label(self,text=”「人人都是 Pythonista」专注 Python 领域,做最专业的 Python 星球。”)
# 设定使用 grid 布局
self.firstLabel.grid()
# 创建一个按钮,用来触发 answer 方法
self.clickButton = tk.Button(self,text=” 点一下瞧瞧?”,command=self.answer)
# 设定使用 grid 布局
self.clickButton.grid()
def answer(self):
# 我们通过 messagebox 来显示一个提示框
mbox.showinfo(“「人人都是 Pythonista」”,”’
这是一个专注 Python 的星球,我们提供「从零单排」、「实战项目」、「大航海」、「技术沙龙」、「技术分享」、「大厂内推」等系列供你选择及学习,当然也会有周边技术沿伸。
本星球会不定期开展各类实战项目,阶段性组织线上技术沙龙、分享等;对于职业发展路线不明确的,我们会邀请到一些大厂 hr 及高级开发、经理等给大家解惑。
加入我们,和千人一起玩 Python,To be a Pythonista!
”’)
# 创建一个 MainUI 对象
app = MainUI()
# 设置窗口标题
app.master.title(‘「人人都是 Pythonista」’)
# 设置窗体大小
app.master.geometry(‘400×100’)
# 主循环开始
app.mainloop()
在这里:
我们导入了 tkinter 的相关模块
定义了初始化函数,通过 grid() 方法将我们的组件传给父容器
自定义一个创建组件的方法,我们创建了一个标签和一个按钮,这个按钮被点击后就会触发 answer 这个方法
我们通过 messagebox 来显示一个提示框
实例化我们的 APP,然后通过主线程来监听我们的界面操作
运行后如下:
5. 总结
想要做出漂亮的 UI 界面,还是需要深入地学习下 Tkinter 这个模块。上文中的我们只用到了框架、按钮、标签、文本这四种控件,而在 Tkinter 中给我们提供了 15 种控件供大家使用。
此外 Tkinter 控件布局有三种方式:包装 pack()、网格 grid()、位置 place(),本文中选用了 grid,大家也可以逐一尝试下有什么区别,期待大家的大试牛刀~
关注公众号「Python 专栏」,后台回复关键字:zsxq03,获取本文全部代码