Tkinter

本页使用了标题或全文手工转换
维基百科,自由的百科全书
Tkinter
開發者Fredrik Lundh[1]
编程语言Python
操作系统跨平台
许可协议Python许可证[2]
网站docs.python.org/3/library/tkinter.html

TkinterTk 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库可用作替代,例如wxPythonPyQtPySidePygamePygletPyGTK

定义

窗口

该词在不同的文中具有不同的含义,通常指用户显示屏上的某处矩形区域。

顶层窗口

指主窗口的子窗口。它将以桌面环境的标准框架和控件装饰。它可以在桌面上移动,通常也可以调整大小。

小工具

指图形用户界面中构成应用程序的任何构建块。

  • 核心小部件:容器:框架、标签框架、顶层、窗格窗口。按钮:按钮、单选按钮、复选按钮(复选框)和菜单按钮。文本小部件:标签、消息、文本。条目小部件:缩放、滚动条、列表框、滑块、旋转框、条目(单行)、选项菜单、文本(多行)和画布(矢量和像素图形)。
  • 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). 

外部链接