Tkinter
開發者 | Fredrik Lundh[1] |
---|---|
编程语言 | Python |
操作系统 | 跨平台 |
许可协议 | Python许可证[2] |
网站 | docs |
Tkinter是Tk GUI工具包的Python绑定包。它是Tk GUI工具包的标准Python接口[3],并且是Python的业界标准GUI工具包。[4]Tkinter同时也包含在Python的Linux、Microsoft Windows和Mac OS X标准库中。Tkinter的名字来自Tk interface。
描述
和大多数现代Tk绑定包一样,Tkinter是透過嵌入在Python解释器中的完整Tcl解释器来包装Python实现的。Tkinter的调用被翻译成Tcl命令,这些命令被提供给这个嵌入式解释器,從而使得在單個程序中可混合Python和Tcl。
它也有几种流行的GUI库可用作替代,例如wxPython、PyQt、PySide、Pygame、Pyglet和PyGTK。
定义
该词在不同的文中具有不同的含义,通常指用户显示屏上的某处矩形区域。
顶层窗口
指主窗口的子窗口。它将以桌面环境的标准框架和控件装饰。它可以在桌面上移动,通常也可以调整大小。
小工具
指图形用户界面中构成应用程序的任何构建块。
- 核心小部件:容器:框架、标签框架、顶层、窗格窗口。按钮:按钮、单选按钮、复选按钮(复选框)和菜单按钮。文本小部件:标签、消息、文本。条目小部件:缩放、滚动条、列表框、滑块、旋转框、条目(单行)、选项菜单、文本(多行)和画布(矢量和像素图形)。
- Tkinter 提供了三个允许显示弹出对话框的模块:tk.messagebox(确认、信息、警告和错误对话框)、tk.filedialog(单文件、多文件和目录选择对话框)和 tk.colorchooser(颜色选择器)。
- Python 2.7和Python 3.1合并了Tk 8.5的“主题 Tk”(“ttk”)功能[5][6]。这使得Tk小部件可以轻松地主题化,使其看起来像运行应用程序的本机桌面环境,从而解决长期以来对Tk(以及因此对Tkinter)的批评。一些小部件是 ttk 独有的,例如组合框、进度条和树状视图小部件.
框架
在Tkinter中,Frame(框架)小部件是复杂布局的基本组织单位。框架是一个矩形区域,可以包含其他小部件。
父小部件和子小部件
创建任何小部件时,都会创建父子关系。例如,如果将文本标签放置在框架内,则框架是标签的父小部件。
小型应用程序
这是一个带有小部件的小型Python 3 Tkinter应用程序:[7]
#!/usr/bin/env python3
from tkinter import *
root = Tk() # 创建根窗口
w = Label(root, text="Hello, world!") # 创建一个带有单词的标签
w.pack() # 把标签放进窗口中
root.mainloop() # 开始主循环
对于 Python 2,唯一的区别是import命令中的“tkinter”是大写的“Tkinter (页面存档备份,存于互联网档案馆)”。[8]
创建过程
创建小部件有四个步骤:[9]
创建
在框架内创建一个小部件。
配置
更改这个小部件的属性。
打包
将它打包到指定的位置,使其可见。开发人员还可以选择使用 .grid()(row=整数,column=整数)(定义行和列来定位小部件,默认为 0)或.place()(relx=整数或小数,rely=整数或小数)(定义框架或窗口中的坐标)。
绑定
将其绑定到函数或事件。
这些步骤通常被简化,并且顺序可能会不同。
简单的程序
这是一个在 Python 中使用面向对象的简单的程序(使用Tcl 8.6,但MacOS上的Python默认不使用它):
#!/usr/bin/env python3
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.mondialLabel = tk.Label(self, text='Hello World')
self.mondialLabel.config(bg="#00ffff")
self.mondialLabel.grid()
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
self.quitButton.grid()
app = Application()
app.master.title('Sample application')
app.mainloop()
- 第1行:程序的Hashbang指令,允许在自执行时选择合适的解释器。[10]
- 第3行:将tkinter模块导入程序的命名空间,但为其设置别名tk。
- 第6行:Application类继承自Tkinter的Frame类。
- 第8行:定义设置Frame的函数。
- 第9行:调用父类Frame的构造函数。
- 第13行:定义小部件。
- 第14行:创建一个名为MondialLabel的标签,其文本为“Hello World”。
- 第15行:将MondialLabel的背景颜色设置为青色。
- 第16行:将标签放置在Application上,使其使用grid()几何管理器方法可见。
- 第17行:创建一个带有文字“Quit”的按钮。
- 第18行:将按钮放置在应用程序上。grid、place和pack都是使小部件可见的方法。
- 第21行:主程序从这里开始,创建Application类的实例。
- 第22行:调用这个方法将窗口标题设置为“Sample application”。
- 第23行:启动程序的主循环,监听鼠标和键盘事件。
参考资料
- ^ Shipman, John W., Tkinter reference: a GUI for Python, New Mexico Tech Computer Center, 2010-12-12 [2012-01-11], (原始内容存档于2014-07-03)
- ^ Archived copy. [2013-11-13]. (原始内容存档于2013-11-13).
- ^ Tkinter — Python interface to Tcl/Tk — Python v2.6.1 documentation. [2009-03-12]. (原始内容存档于2012-10-18).
- ^ Tkinter - Pythoninfo Wiki. [2021-06-25]. (原始内容存档于2020-06-16).
- ^ Python issue #2983, "Ttk support for Tkinter". [2021-06-25]. (原始内容存档于2010-04-19).
- ^ Python subversion revision 69051, which resolves issue #2983 by adding the ttk module.
- ^ Tkinter 8.5 reference: a GUI for Python. [2021-06-25]. (原始内容存档于2016-12-04).
- ^ Fleck, Dan. Tkinter – GUIs in Python (PDF). CS112. George Mason University. [18 August 2018]. (原始内容 (PDF)存档于2020-08-09).
- ^ Klein, Bernd. GUI Programming with Python: Events and Binds. www.python-course.eu. [18 August 2018]. (原始内容存档于2021-07-20).
- ^ PEP 397 — Python launcher for Windows — Python.org. [2017-06-07]. (原始内容存档于2021-06-29).
外部链接
- TkInter, Python Wiki, [2021-06-25], (原始内容存档于2020-06-16)
- Tkinter GUI Tutorial (页面存档备份,存于互联网档案馆):分别涵盖每个小部件。
- Lundh, Fredrik, An Introduction to Tkinter, 1999 [2021-06-25], (原始内容存档于2012-10-19)
- TkDocs (页面存档备份,存于互联网档案馆):包括Python信息和教程
- Ferg, Stephen, Thinking in Tkinter, [2022-05-18], (原始内容存档于2021-03-07)