Tkinter

Tkinter
開發者Fredrik Lundh[1]
编程语言Python
操作系统跨平台
许可协议Python许可证[2]
网站docs.python.org/3/library/tkinter.html

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指令英语Interpreter directive,允许在自执行时选择合适的解释器。[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行:启动程序的主循环,监听鼠标和键盘事件。

参考资料

  1. ^ Shipman, John W., Tkinter reference: a GUI for Python, New Mexico Tech Computer Center, 2010-12-12 [2012-01-11], (原始内容存档于2014-07-03) 
  2. ^ Archived copy. [2013-11-13]. (原始内容存档于2013-11-13). 
  3. ^ Tkinter — Python interface to Tcl/Tk — Python v2.6.1 documentation. [2009-03-12]. (原始内容存档于2012-10-18). 
  4. ^ Tkinter - Pythoninfo Wiki. [2021-06-25]. (原始内容存档于2020-06-16). 
  5. ^ Python issue #2983, "Ttk support for Tkinter". [2021-06-25]. (原始内容存档于2010-04-19). 
  6. ^ Python subversion revision 69051, which resolves issue #2983 by adding the ttk module. 
  7. ^ Tkinter 8.5 reference: a GUI for Python. [2021-06-25]. (原始内容存档于2016-12-04). 
  8. ^ Fleck, Dan. Tkinter – GUIs in Python (PDF). CS112. George Mason University. [18 August 2018]. (原始内容 (PDF)存档于2020-08-09). 
  9. ^ Klein, Bernd. GUI Programming with Python: Events and Binds. www.python-course.eu. [18 August 2018]. (原始内容存档于2021-07-20). 
  10. ^ 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) 
部件工具箱列表英语List of widget toolkits
低级
AmigaOS平台
  • Intuition英语Intuition (Amiga)
未知/原生
  • Macintosh Toolbox英语Macintosh Toolbox
  • Carbon
桌面
  • Xamarin.Mac英语Xamarin#Xamarin.Mac
移动端
Windows平台
BeOS/Haiku平台
  • OpenTK英语OpenTK
  • GDK英语GDK
  • JOGL英语Java OpenGL
Android平台
高级
AmigaOS平台
  • BOOPSI英语BOOPSI
  • MUI英语Magic User Interface
  • ReAction GUI英语ReAction GUI
  • Zune英语Zune (widget toolkit)
  • Carbon
  • MacApp英语MacApp
桌面
移动端
  • MacZoop英语MacZoop
  • PowerPlant英语PowerPlant
Windows平台
桌面
  • MFC
  • ATL
  • WTL
  • SmartWin++英语SmartWin++
  • OWL
  • VCL英语Visual Component Library
  • Athena (Xaw)
  • InterViews英语InterViews
  • LessTif英语LessTif
  • Motif
  • OLIT英语OLIT
  • XForms英语XForms (toolkit)
Android平台
跨平台
按语言划分
  • GTK+
  • IUP英语IUP (software)
  • Tk
  • wxC
  • XForms英语XForms (toolkit)
  • XVT英语XVT
  • CEGUI英语CEGUI
  • CLX英语Component Library for Cross Platform
  • FLTK
  • FOX toolkit英语Fox toolkit
  • GLUI英语OpenGL User Interface Library
  • Gtkmm
  • JUCE英语JUCE
  • Nana英语Nana (C++ library)
  • Qt
  • Rogue Wave Views英语Rogue Wave Software
  • TnFOX英语TnFOX
  • Ultimate++英语Ultimate++
  • VCF英语Visual Component Framework
  • Wt英语Wt (web toolkit)
  • WxWidgets
  • YAAF英语YAAF
桌面
  • Gtk#
  • Tao英语Tao FrameworkOpenTK英语OpenTKTaoClassic英语TaoClassic
  • wx.NET
  • UIML.NET英语UIML
  • MonoGame英语MonoGame
Web
  • Moonlight英语Moonlight (runtime)
移动端
  • DFL
  • DlangUI
  • DWT
  • GTK+
  • QtD
  • wxD
  • Gtk2Hs
  • wxHaskell英语wxHaskell
桌面
Web
移动端
  • LWUIT英语Lightweight User Interface Toolkit
  • CAPI英语LispWorks
  • CLIM英语Common Lisp Interface Manager
  • Common Graphics英语Allegro Common Lisp
  • Ltk
  • McCLIM英语Common Lisp Interface Manager
  • IUP英语IUP (software)
  • wxLua
桌面
移动端
桌面
  • CLX英语Component Library for Cross Platform
  • fpGUI英语fpGUI
  • IP Pascal英语IP Pascal
  • LCL
移动端
  • PHP-GTK英语PHP-GTK
  • PHP-Qt英语PHP-Qt
  • wxPHP英语wxPHP
  • Ample SDK英语Ample SDK
  • GladeXML
  • Lively Kernel英语Lively Kernel
  • Pyjs英语Pyjs
  • Rialto Toolkit英语Rialto Toolkit
  • XAML
  • XUI英语XML User Interface
  • XUL
  • Wt英语Wt (web toolkit)