大多数情况下,Tkinter模块都是您真正需要的,但也有一些额外的模块可供选择。Tk接口位于名为的二进制模块中_tkinter。该模块包含Tk的底层接口,不应直接由应用程序员使用。它通常是共享库(或DLL),但在某些情况下可能会与Python解释器静态链接。
除了Tk接口模块外,Tkinter还包括许多Python模块。两个最重要的模块是Tkinter模块本身,还有一个模块叫做Tkconstants。前者自动导入后者,所以要使用Tkinter,你只需要导入一个模块:
importTkinter或者更经常地:
将Tk类实例化没有参数。这会创建一个Tk的顶层小部件,它通常是应用程序的主窗口。每个实例都有自己关联的Tcl解释器。
在版本2.4中更改:添加了useTk参数。
该Tcl()函数是一个工厂函数Tk,除了不初始化Tk子系统外,它创建的对象非常类似于该类创建的对象。在不希望创建无关的顶层窗口的环境中,或者在无法(如没有X服务器的Unix/Linux系统)环境中驱动Tcl解释器时,这通常很有用。由对象创建的Tcl()对象可以通过调用其loadtk()方法创建Toplevel窗口(并初始化Tk子系统)。
2.4版本中的新功能。
其他提供Tk支持的模块包括:
ScrolledTextText小部件,内置一个垂直滚动条in.tkColorChooserDialog,让用户选择一个color.tkCommonDialogBase类,用于在这里列出的其他模块中定义的对话框。tkFileDialogCommon对话框允许用户指定要打开的文件或save.tkFontUtilities以帮助使用fonts.tkMessageBoxAccess来标准Tk对话框boxes.tkSimpleDialogBasic对话框和便捷函数.Tkdnd拖放支持Tkinter。这是实验性的,当它在Tk窗口中用TkDND.turtleTurtle图形取代时应该被弃用。
这些已经在Python3中重新命名了;他们都是新tkinter包装的子模块。
本节不是为Tk或Tkinter的详尽教程而设计的。相反,它旨在作为一个制止差距,为系统提供一些入门指导。
Credits:
本部分分为两部分:前半部分(大致)包含背景材料,后半部分可作为便于参考的键盘。
当试图回答“我该怎么做”这个形式的问题时,通常最好找出如何在直接Tk中做“无用”,然后将其转换回相应的Tkinter呼叫。Python程序员通常可以通过查看Tk文档来猜测正确的Python命令。这意味着为了使用Tkinter,你必须知道一些关于Tk的知识。这个文件不能完成这个角色,所以我们能做的最好的事情就是向您提供最好的文档。以下是一些提示:
fromTkinterimport*classApplication(Frame):defsay_hi(self):print"hithere,everyone!"defcreateWidgets(self):self.QUIT=Button(self)self.QUIT["text"]="QUIT"self.QUIT["fg"]="red"self.QUIT["command"]=self.quitself.QUIT.pack({"side":"left"})self.hi_there=Button(self)self.hi_there["text"]="Hello",self.hi_there["command"]=self.say_hiself.hi_there.pack({"side":"left"})def__init__(self,master=None):Frame.__init__(self,master)self.pack()self.createWidgets()root=Tk()app=Application(master=root)app.mainloop()root.destroy()3.(非常)快速浏览Tcl/Tk类层次结构看起来很复杂,但实际上,应用程序员几乎总是引用层次结构底部的类。
注意:
为了使用这个参考资料,有时候您需要知道如何阅读Tk的简短段落以及如何识别Tk命令的各个部分。(请参阅将Tk的基本Tk映射到Tkinter中,Tkinter以了解下面的内容。)
Tk脚本是Tcl程序。像所有的Tcl程序一样,Tk脚本只是由空格分隔的令牌列表。传统知识小部件就是它的类的选项,帮助配置,和行动,使人们做有用的事情。
要在Tk中创建一个小部件,该命令始终是以下形式:
例如:
button.fred-fgred-text"hithere"^^\_____________________/|||classnewoptionscommandwidget(-optval-optval...)一旦创建,小部件的路径名变成新命令。这个新的Widget命令是程序员获取新Widget执行某些操作的句柄。在C语言中,你可以用C++表示它为someAction(fred,someOptions),你可以将它表示为fred.someAction(someOptions),在Tk中,你会说:
.fredsomeActionsomeOptions请注意,对象名称.fred以点开头。
正如你所期望的那样,someAction的合法值将取决于窗口部件的类:.fred禁用如果fred是一个按钮(fred变灰),但不起作用,但如果fred是标签,则不起作用(不支持禁用标签在Tk)。
someOptions的合法价值取决于行动。某些操作(如disable)不需要参数,其他操作(如文本输入框的delete命令)需要参数来指定要删除的文本范围。
Tk中的类命令对应于Tkinter中的类构造函数。
button.fred=====>fred=Button()对象的主对象隐含在创建时给它的新名称中。在Tkinter中,明确指定了主人。
button.panel.fred=====>fred=Button(panel)Tk中的配置选项在带有数值的紧跟标签列表中给出。在Tkinter中,选项在实例构造函数中被指定为关键字参数,在配置调用中被指定为keyword-args,或者在字典样式中被指定为已建立实例的实例索引。请参见设置选项中的设置选项部分。
button.fred-fgred=====>fred=Button(panel,fg="red").fredconfigure-fgred=====>fred["fg"]=redOR==>fred.config(fg="red")在Tk中,要在小部件上执行操作,请使用小部件名称作为命令,然后使用操作名称,可能带有参数(选项)。在Tkinter中,您可以调用类实例上的方法来调用窗口小部件上的操作。Tkinter.py模块中列出了给定小部件可以执行的动作(方法)。
.fredinvoke=====>fred.invoke()要给封装器(几何管理器)提供一个小部件,可以使用可选参数调用封装。在Tkinter中,Pack类拥有所有这些功能,并且各种形式的pack命令都作为方法实现。所有的小部件Tkinter都是从Packer中分类出来的,因此继承了所有的打包方法。有关Tix表格几何管理器的其他信息,请参阅模块文档。
你的应用程序在这里(Python)一个Python应用程序进行Tkinter调用.Tkinter(Python模块)这个调用(例如,创建一个按钮控件)在Tkinter模块中实现,该模块是用Python编写的。这个Python函数将解析命令和参数并将它们转换为一种形式,使它们看起来好像它们来自Tk脚本而不是Python脚本.tkinter(C)这些命令及其参数将传递给C在tkinter中的功能-注意小写-扩展模块.TkWidgets(C和Tcl)这个C函数可以调用其他C模块,包括组成Tk库的C函数。Tk在C和一些Tcl中实现。Tk小部件的Tcl部分用于将某些默认行为绑定到小部件,并且在Tkinter导入Python模块的位置执行一次。(用户从不会看到这个阶段).Tk(C)TkWidgets的Tk部分实现了最终映射到...Xlib(C)Xlib库在屏幕上绘制图形。
选项控制一些东西,比如一个小部件的颜色和边框宽度。选项可以通过三种方式设置:
在创建对象时,使用关键字参数
fred=Button(self,fg="red",bg="blue")创建对象后,将选项名称视为字典索引
fred["fg"]="red"fred["bg"]="blue"使用config()方法更新对象创建后的多个attrs
请注意,手册页列出了每个窗口小部件的“标准选项”和“小部件特定选项”。前者是许多小部件通用的选项列表,后者是特定小部件特有的选项。标准选项记录在选项(3)手册页上。
本文档没有区分标准和特定于窗口小部件的选项。有些选项不适用于某些类型的小部件。给定小部件是否响应特定选项取决于小部件的类别;按钮有一个command选项,标签没有。
指数
含义
例
0
选项名称
1
数据库查找的选项名称
2
选项类用于数据库查找
3
默认值
4
当前值
例:
封隔器是Tk的几何管理机制之一。几何管理器用于指定小部件在其容器中的定位的相对位置-它们是相互的主人。相较于较为繁琐placer(用于不常用,我们在这里不介绍),封隔器采用定性关系规范-above,totheleftof,filling等等-和工作的一切,以确定确切位置坐标为你。
任何主控件的大小由内部“从控件”的大小决定。打包器用于控制从站窗口小部件在其打包的主站内出现的位置。您可以将窗口小部件封装到框架中,并将框架封装到其他框架中,以实现您所需的布局。此外,这种安排是动态调整的,以适应配置的增量变化,一旦打包完成。
请注意,窗口小部件在用几何管理器指定几何图形之前不会显示。忽略几何规格是一个常见的早期错误,然后在创建小部件时会感到惊讶,但没有任何内容出现。例如,小部件只有在pack()应用打包器的方法后才会出现。
可以使用关键字选项/值对调用pack()方法,该对控制了窗口小部件出现在其容器中的位置,以及在主应用程序窗口调整大小时的行为方式。这里有些例子:
fred.pack()#defaultstoside="top"fred.pack(side="left")fred.pack(expand=1)6.3封装选项有关打包机的更多信息及其可以选择的选项,请参阅JohnOusterhout书中的手册页和第183页。
某些小部件(如文本输入小部件)的当前值设置可以通过使用特殊选项直接连接到应用程序变量。这些选项是可变的,文本变量,onvalue,offvalue和值。这种连接可以两种方式工作:如果变量因任何原因而变化,它所连接的小部件将被更新以反映新值。
不幸的是,在Tkinter的当前实现中,不可能通过变量或文本变量选项将任意Python变量移交给小部件。这个变量的唯一类型是从Tkinter模块中定义的类变量中分类的变量。
已经定义了许多有用的变量的子类:StringVar,IntVar,DoubleVar和BooleanVar。要读取此变量的当前值,请调用get()方法,并更改其值,您可以调用set()方法。如果你遵循这个协议,那么这个小部件将总是跟踪这个变量的值,而不需要你做进一步的干预。
要查看包含给定窗口小部件的顶层窗口,通常可以引用窗口小部件的主窗口。当然,如果这个小部件已经被封装在一个框架内,那么这个主框架将不会代表一个顶层窗口。要访问包含任意小部件的顶级窗口,可以调用该_root()方法。该方法以下划线开头,表示这个函数是实现的一部分,而不是Tk功能的接口。
以下是一些典型用法的例子:
这是任何不带参数的Python函数。例如:
通过widget命令的绑定方法,您可以监视某些事件并在发生该事件类型时触发回调函数。绑定方法的形式是:
defturnRed(self,event):event.widget["activeforeground"]="red"self.button.bind("
TkTkinterEventFieldTkTkinterEventField------------------------------------------%ffocus%Achar%hheight%Esend_event%kkeycode%Kkeysym%sstate%Nkeysym_num%ttime%Ttype%wwidth%Wwidget%xx%Xx_root%yy%Yy_root6.8索引参数许多小部件需要传递“索引”参数。它们用于指向Text小部件中的特定位置,或指向Entry小部件中的特定字符或指向Menu小部件中的特定菜单项。
Entrywidgetindexes(index,viewindex,etc.)
条目窗口小部件具有涉及正在显示的文本中的字符位置的选项。您可以使用这些Tkinter函数来访问文本小部件中的这些特殊点:
AtEnd()指的是textAtInsert()中的最后一个位置,指的是文本光标isAtSelFirst()指示选定文本的开始点的点.AtSelLast()表示所选文本的最后一个点,finallyAt(x,y)指向到像素位置x,y处的字符(对于包含单行文本的文本输入小部件,y不使用y)。文本小部件索引文本小部件的索引符号非常丰富,最好在Tk中进行描述manpages.Menu索引(menu.invoke(),menu.entryconfig()等)
一些菜单选项和方法可以操作特定的菜单条目。无论何时,对于选项或参数都需要菜单索引,您可以通过:
位图/像素图像可以通过以下子类创建Tkinter.Image:
任何类型的图像都是通过file或data选项创建的(其他选项也可用)。
这个图像对象可以用于任何一个image小部件支持的选项(例如标签,按钮,菜单)。在这些情况下,Tk将不会保留对图像的引用。当删除对图像对象的最后一个Python引用时,图像数据也会被删除,并且无论图像在哪里使用,Tk都会显示一个空框。
Tk允许你注册和取消注册一个回调函数,当一个文件描述符可能有I/O时,这个回调函数将从Tkmainloop调用。每个文件描述符只能注册一个处理程序。示例代码:
importTkinterwidget=Tkinter.Tk()mask=Tkinter.READABLE|Tkinter.WRITABLEwidget.tk.createfilehandler(file,mask,callback)...widget.tk.deletefilehandler(file)此功能在Windows上不可用。
由于您不知道有多少字节可供读取,因此您可能不想使用BufferedIOBaseorTextIOBaseread()或readline()方法,因为这些字节会坚持读取预定义的字节数。对于套接字,recv()orrecvfrom()方法可以正常工作;对于其他文件,请使用原始读取或os.read(file.fileno(),maxbytecount)。
Widget.tk.createfilehandler(file,mask,func)
注册文件处理程序回调函数func。该文件的参数可以是与一个对象fileno()的方法(例如,文件或套接字对象),或一个整数文件描述符。的掩模参数是任何以下三个常量的或运算组合。回调被调用如下:
callback(file,mask)Widget.tk.deletefilehandler(file)
取消注册文件处理程序。
Tkinter.READABLETkinter.WRITABLETkinter.EXCEPTION
掩码参数中使用的常量。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系cloudcommunity@tencent.com