python GUI 编程 ( Tkinter )
Python 还支持图形界面编程
Python 官方和社区提供了多个图形开发界面的库,你可以从中挑选熟悉的
-
Tkinter
Tkinter 模块是 Python 的标准 Tk GUI 工具包的接口
Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里
Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中
对了,你所熟悉的 Python IDLE 也是用 Tkinter 开发的
-
wxPython
wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面
-
Jython
Jython 程序可以和 Java 无缝集成
除了一些标准模块,Jython 使用 Java 的模块
Jython 几乎拥有标准的 Python 中不依赖于 C 语言的全部模块
Jython 的用户界面可以使用 Swing, AWT 或者 SWT
Jython 可以被动态或静态地编译成 Java 字节码
Tkinter 编程
本章节我们将介绍如何使用 Python 内置的 Tkinter 模块快速的创建 GUI 应用程序
导入模块
import Tkinter
简单的窗口
使用 Tkinter 创建一个简单的窗口需要经过以下几步
- 导入 Tkinter 模块
- 创建一个 Tk 类的实例
- 进入主消息循环
#!/usr/bin/python # -*- coding: UTF-8 -*- import Tkinter top = Tkinter.Tk() # 进入消息循环 top.mainloop()
运行以上代码,弹出窗口如下
是不是很简单?除去各种注释,才简单三行代码
简单的列表框
前面我们学习了如何创建一个窗口,这次我们往刚刚创建的窗口里添加两个列表框
步骤如下
- 导入 Tkinter 模块
- 创建控件
- 指定这个控件的 master,即这个控件属于哪一个窗口
- 告诉 GM(geometry manager) 有一个控件产生了
#!/usr/bin/python # -*- coding: UTF-8 -*- import Tkinter # 导入 Tkinter 库 win = Tkinter.Tk() # 创建窗口 # 创建两个列表 li = ['福建','北京','上海','浙江','江苏','广东'] movie = ['东城区','西城区','朝阳区'] listb = Tkinter.Listbox(win) # 创建两个列表组件 listb2 = Tkinter.Listbox(win) for item in li: # 第一个小部件插入数据 listb.insert(0,item) for item in movie: # 第二个小部件插入数据 listb2.insert(0,item) listb.pack() # 将小部件放置到主窗口中 listb2.pack() win.mainloop() # 进入消息循环
运行以上代码,显示窗口如下
如何使用 Tkinter 创建复杂的窗口我们就不继续讲述了,以后有机会会单独开一个小教程
接下来我们介绍 Tkinter 的一些基础的知识
Tkinter 组件 ( 控件 )
Tkinter 提供了丰富的控件,上文我们已经介绍了列表控件,还有更多的如 按钮控件,标签控件,文本框控件等等
下表列出了 Tkinter 提供的 15 种控件
控件 | 描述 |
---|---|
Button | 按钮控件;在程序中显示按钮 |
Canvas | 画布控件;显示图形元素如线条或文本 |
Checkbutton | 多选框控件;用于在程序中提供多项选择框 |
Entry | 输入控件;用于显示简单的文本内容 |
Frame | 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 |
Label | 标签控件;可以显示文本和位图 |
Listbox | 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 |
Menubutton | 菜单按钮控件,由于显示菜单项 |
Menu | 菜单控件;显示菜单栏,下拉菜单和弹出菜单 |
Message | 消息控件;用来显示多行文本,与 label 比较类似 |
Radiobutton | 单选按钮控件;显示一个单选的按钮状态 |
Scale | 范围控件;显示一个数值刻度,为输出限定范围的数字区间 |
Scrollbar | 滚动条控件,当内容超过可视化区域时使用,如列表框 |
Text | 文本控件;用于显示多行文本 |
Toplevel | 容器控件;用来提供一个单独的对话框,和Frame比较类似 |
Spinbox | 输入控件;与 Entry 类似,但是可以指定输入范围值 |
PanedWindow | PanedWindow 是一个窗口布局管理的插件,可以包含一个或者多个子控件 |
LabelFrame | labelframe 是一个简单的容器控件。常用与复杂的窗口布局 |
tkMessageBox | 用于显示你应用程序的消息框 |
标准属性
上表列出的所有控件都有一些共同的属性,比如大小,字体和颜色等
下表列出了这些共同属性
属性 | 描述 |
---|---|
Dimension | 控件大小 |
Color | 控件颜色 |
Font | 控件字体 |
Anchor | 锚点 |
Relief | 控件样式 |
Bitmap | 位图 |
Cursor | 光标 |
布局管理
Tkinter 控件有特定的布局状态管理方法
布局管理着控件在父控件中如何摆放
Tkinter 公开的图形管理类: pack
,grid
,place