说明
此处讨论小部件方法,凡是可以产生动作的函数均列在此处。包括:定时器、闲暇、绑定、属性配置、布局管理等,属于高级编程的必备知识。了解通用小部件方法,对于客户定制公共类库有极大助益,请务必掌握。
26 通用小部件方法
26.1 定时器
下面在所有小部件上定义了这些方法。在描述中,
可以是任何类型的任何小部件。w
w
.after(delay_ms
, callback=None, *args
)
请求Tkinter在延迟至少几毫秒后调用callback
带参数的函数 。实际花费的时间没有上限,但是您的回调不会比您请求的时间更早被调用,并且只会被调用一次。 args
delay_ms
.after_cancel()
此方法返回一个“标识符后”的整数,如果您想取消回调, 可以将该整数传递给该方法。
如果不传递callback
参数,此方法将等待delay_ms
几毫秒,就像标准 Python模块.sleep()
的函数一样。 time
w
.after_cancel(id
)
取消先前设置的回调请求.after()
。参数
是原始调用返回的结果 id
.after()
。
w
.after_idle(func
, *args
)
请求Tkinter在下次系统空闲时(即下次没有要处理的事件时)调用
带有参数的函数。func
回调只会被调用一次。如果您希望再次调用回调,则必须args
.after_idle
再次调用该方法。
w
.bell()
发出声音,通常是蜂鸣声。
26.2 绑定
w
.bind(sequence
=None, func
=None, add
=None)
此方法用于将事件绑定附加到小部件。有关事件绑定的概述 ,请参阅第 54 节“事件” 。
该
参数描述了我们期望的事件,并且该 sequence
参数是当该事件发生在小部件上时要调用的函数。如果该小部件已经有该事件的绑定,通常旧的回调会被替换为func
,但您可以通过传递 来保留这两个回调func
add='+'
。
w
.bind_all(sequence
=None, func
=None, add
=None)
与 类似.bind()
,但适用于整个应用程序中的所有小部件。
w
.bind_class(className
, sequence
=None, func
=None, add=None)
与 类似.bind()
,但适用于所有名为
(例如 className
'Button'
)的小部件。
w
.bindtags(tagList
=None)
如果调用此方法,它将以字符串序列的形式返回小部件的“绑定标签”。绑定标签是窗口的名称(以 开头'.'
)或类的名称(例如,'Listbox'
)。
您可以通过将您希望小部件使用的绑定标记序列作为参数传递来更改调用绑定级别的顺序。
有关绑定级别及其与标签的关系的讨论, 请参阅第 54 节“事件” 。
26.4 属性值的字符串缓存
w
.cget(option
)
以字符串形式 返回 的当前值。您还可以获取小部件的选项值,option
如。 w
w
[option
]
w
.clipboard_append(text
)
将给定
字符串附加到显示器的剪贴板,其中存储了该显示器的所有应用程序的剪切和粘贴字符串。text
w
.clipboard_clear()
清除显示器的剪贴板(见.clipboard_append()
上文)。
w
.column_configure()
请参见第 4.2 节“其他网格管理方法”。
w
.config(option
=value
, ...)
与...一样.configure()
。
w
.configure(option
=value
, ...)
设置一个或多个选项的值。class
对于名称为 Python 保留字 ( , from
, )的选项in
,请使用尾随下划线: 'class_'
, 'from_'
, 'in_'
。
您还可以使用以下语句 设置小部件的选项值w
w[ option] =value
如果您.config()
在不带参数的情况下调用小部件上的方法,您将获得所有小部件当前选项的字典。键是选项名称(包括bd
for等别名borderwidth
)。每个键的值是:
-
采取五元组,对于大多数条目,:(选项名称、选项数据库密钥、选项数据库类、默认值、当前值);或者,
-
一个二元组,对于别名(例如
'fg'
),( 别名, 等效标准名称)。
26.5 关于事件
w
.destroy()
调用
一个小部件 w
.destroy()
会销毁w
它及其所有子部件。w
w
.event_add(virtual
, *sequences
)
此方法创建一个虚拟事件,其名称由字符串参数给出
。每个附加参数描述一个 序列,即物理事件的描述。当该事件发生时,将触发新的虚拟事件。virtual
有关虚拟事件的一般描述 , 请参阅第 54 节“事件” 。
w
.event_delete(virtual
, *sequences
)
从名称由字符串指定的虚拟事件中删除物理事件
。如果从给定的虚拟事件中删除所有物理事件,则该虚拟事件将不再发生。virtual
w
.event_generate(sequence
, **kw
)
此方法无需任何外部刺激即可触发事件。事件的处理与外部刺激触发的事件相同。参数
描述要触发的事件。sequence
Event
您可以通过提供参数来设置对象中选定字段的值,其中指定对象中字段的名称 。 keyword
=value
keyword
Event
有关事件的完整讨论 , 请参阅第 54 节“事件” 。
如果您不带参数调用此方法,您将返回所有当前定义的虚拟事件名称的序列。
要检索与虚拟事件关联的物理事件,请将此虚拟事件的名称传递给此方法,您将返回物理名称的序列
,或者sequence
None
如果给定的虚拟事件从未定义过。
26.6 关于焦点
w
.focus_displayof()
返回当前在与小部件相同的显示器上具有输入焦点的窗口的名称。如果没有这样的窗口具有输入焦点,则返回None
。
有关输入焦点的一般描述 , 请参阅第 53 节“焦点:路由键盘输入” 。
w
.focus_force()
强制将输入焦点置于小部件上。这是不礼貌的。最好等待窗口管理器为您提供焦点。另请参阅.grab_set_global()
下文。
w
.focus_get()
返回在此应用程序中具有焦点的小部件(如果有),否则返回None
。
w
.focus_lastfor()
此方法检索在包含 的顶级窗口中最后获得输入焦点的小部件的名称
。如果该顶级小部件都没有获得过输入焦点,则它返回顶级小部件的名称。如果此应用程序没有输入焦点,w
.focus_lastfor()
则将返回下次返回此应用程序时将获得焦点的小部件的名称。
w
.focus_set()
如果
的应用程序具有输入焦点,则焦点将跳转到w
。如果w
的应用程序没有焦点,Tk 会记住将其交给w
下一个获得焦点的应用程序。w
w
.grab_current()
如果的显示 有效,则返回其标识符,否则返回w
None
。有关抢夺的讨论 ,请参阅第 54 节“事件” 。
w
.grab_release()
如果
有有效的抓握,请将其释放。w
w
.grab_set()
小部件抓取的应用程序
的所有事件。w
如果有另一次强力的抓握,它就会消失。有关抢夺的讨论 ,请参阅第 54 节“事件” 。w
w
.grab_set_global()
小部件
抓取整个屏幕的所有事件。这被认为是不礼貌的,只有在非常需要的时候才应该使用。任何其他有效的抓取都会消失。尝试只将这种可怕的力量用于正义的力量,而不是邪恶的力量,好吗?w
w
.grab_status()
如果存在有效的本地抓取(由 设定.grab_set()
),则此方法返回字符串 'local'
。如果存在有效的全局抓取(来自.grab_set_global()
),则返回'global'
。如果没有强制抓取,则返回None
。
26.4 停靠位置
w
.grid_forget()
请参见第 4.2 节“其他网格管理方法”。
w
.grid_propagate()
请参见第 4.2 节“其他网格管理方法”。
w
.grid_remove()
请参见第 4.2 节“其他网格管理方法”。
w
.image_names()
以字符串序列的形式 返回 的应用程序中所有图像的名称。w
w
.keys()
以字符串序列的形式返回小部件的选项名称。
w
.lift(aboveThis=None)
如果参数为None
,则包含的窗口
将移动到窗口堆叠顺序的顶部。要将窗口移动到某个 w
Toplevel
window 的上方
,请w
作为参数传递。w
w
.lower(belowThis=None)
如果参数为None
,则包含的窗口
将移动到窗口堆叠顺序的底部。要将窗口移动到某个 w
Toplevel
window 的正下方
,请w
作为参数传递。w
w
.mainloop()
通常必须在创建所有静态小部件之后调用此方法才能开始处理事件。您可以使用方法(如下)离开主循环.quit()
。您还可以在事件处理程序中调用此方法来恢复主循环。
w
.nametowidget(name
)
此方法返回路径名为 的实际小部件
。请参见第 5.11 节“窗口名称”。如果name
未知,此方法将引发name
KeyError
。
26.5 窗口参数选项
w
.option_add(pattern
, value
, priority
=None)
此方法将默认选项值添加到Tkinter 选项数据库。是
一个字符串,指定pattern
一个或多个小部件的选项的默认值。这些value
值为以下之一:priority
20 | 对于小部件的全局默认属性。 |
40 | 对于特定应用程序的默认属性。 |
60 | 对于来自用户文件(例如他们的.Xdefaults 文件)的选项。 |
80 | 对于应用程序启动后设置的选项。这是默认优先级。 |
较高级别的优先级优先于较低级别的优先级。有关选项数据库的概述,请参见第 27 节“外观标准化” 。
参数的语法与 资源规范行的部分 pattern
.option_add()
相同 。option-pattern
例如,要获得此资源规范行的效果:
*Button*font: times 24 bold
您的应用程序(self
在本例中)可能包含以下几行:
self.bigFont = tkFont.Font(family='times', size=24,weight='bold')self.option_add('*Button*font', self.bigFont)
执行这些行后创建的任何Button
小部件都将默认为粗体 Times 24 字体(除非被构造函数font
的选项覆盖Button
)。
w
.option_clear()
此方法从Tkinter选项数据库 中删除所有选项 。这具有返回到所有默认值的效果。
w
.option_get(name
, classname
)
使用此方法从Tkinter选项数据库 检索选项的当前值。第一个参数是实例键,第二个参数是类键。如果有任何匹配项,它将返回最匹配的选项的值。如果没有匹配项,则返回''
。
有关按键如何与选项匹配的更多信息 , 请参阅第 27 节“标准化外观” 。
w
.option_readfile(fileName
, priority
=None)
为了方便用户配置,您可以指定一个命名文件,用户可以在其中放置自己的首选选项,并使用与该 .Xdefaults
文件相同的格式。然后,当您的应用程序初始化时,您可以将该文件的名称传递给此方法,并且该文件中的选项将被添加到数据库中。如果文件不存在,或其格式无效,此方法将引发tk.TclError
.
有关选项数据库和选项文件格式的介绍 , 请参阅第 27 节“标准化外观” 。
w
.register(function
)
此方法围绕 Python 创建 Tcl 包装器 function
,并以字符串形式返回 Tcl 包装器名称。有关此方法的使用示例,请参阅第 10.2 节“向Entry 小部件添加验证”。
w
.quit()
该方法退出主循环。.mainloop()
有关主循环的讨论, 请参见上面的内容。
w
.rowconfigure()
请参见第 4.2 节“其他网格管理方法”。
w
.selection_clear()
如果
当前有一个选择(例如条目小部件中突出显示的文本段),请清除该选择。w
w
.selection_get()
如果
当前有一个选择,此方法将返回选定的文本。如果没有选择,则会引发w
tk.TclError
。
w
.selection_own()
使的显示
中的选择成为所有者w
,从之前的所有者(如果有)那里窃取它。w
w
.selection_own_get()
返回当前拥有显示 中的选择的小部件 。w
tk.TclError
如果没有这样的选择,则 引发。
w
.tk_focusFollowsMouse()
通常,输入焦点在一系列小部件之间循环,这些小部件由它们的层次结构和创建顺序确定;请参见第 53 节“焦点:路由键盘输入”。相反,您可以告诉Tkinter将焦点强制置于鼠标所在的位置;只需调用这个方法即可。然而,没有简单的方法可以撤销它。
w
.tk_focusNext()
返回焦点遍历序列中 紧随其后的小部件。有关焦点遍历的讨论 ,请参阅第 53 节“焦点:路由键盘输入” 。w
w
.tk_focusPrev()
返回焦点遍历序列中 位于前面的小部件。w
w
.unbind(sequence
, funcid
=None)
此方法删除所描述的事件的 绑定w
。如果第二个参数是绑定到该序列的回调,则该回调将被删除,其余部分(如果有)保留在原处。如果省略第二个参数,则删除所有绑定。sequence
有关事件绑定的一般讨论, 请参阅下面第 54 节“事件” 。
w
.unbind_all(sequence
)
删除整个应用程序中给定 描述的事件的所有事件绑定
。sequence
w
.unbind_class(className
, sequence
)
与 类似.unbind()
,但适用于所有名为
(例如, className
'Entry'
或'Listbox'
)的小部件。
w
.update()
此方法强制更新显示。仅当您知道自己在做什么时才应使用它,因为它可能会导致不可预测的行为或循环。永远不应该从事件回调或从事件回调调用的函数中调用它。
更新显示中的一些任务(例如调整大小和重绘小部件)称为空闲任务,因为它们通常被推迟到应用程序完成处理事件并返回主循环以等待新事件为止。
如果您想在应用程序下一次空闲之前强制更新显示,请
在任何小部件上调用该方法。w
.update_idletasks()
w
.wait_variable(v
)
等待直到变量的值
被设置,即使该值没有改变。此方法进入本地等待循环,因此它不会阻塞应用程序的其余部分。v
w
.wait_visibility(w
)
等待小部件
(通常为w
Toplevel
)可见。
w
.wait_window(w
)
等到窗口
被破坏。w
w
.winfo_children()
返回所有子级的列表
,按照从最低(底部)到最高(顶部)的堆叠顺序。w
w
.winfo_class()
返回
的类名(例如,w
'Button'
)。
w
.winfo_containing(rootX
, rootY
, displayof
=0)
该方法用于查找包含点(
, rootX
) 的窗口。如果该rootY
displayof
选项为 false,则坐标相对于应用程序的根窗口;如果为 true,则坐标被视为相对于包含 的顶级窗口
。如果指定点位于应用程序的顶级窗口之一,则此方法返回该窗口;否则返回w
None
。
w
.winfo_depth()
返回的显示 中每个像素的位数。w
w
.winfo_fpixels(number
)
对于任何尺寸
(请参阅第 5.1 节“尺寸”),此方法返回 显示器上的距离(以像素为单位)number
,作为 类型的数字w
float
。
w
.winfo_geometry()
返回描述 的大小和屏幕位置的几何字符串
。请参见第 5.10 节“几何字符串”。w
警告
在应用程序更新其空闲任务之前,几何图形并不准确。特别是,所有几何图形最初都是 '1x1+0+0'
直到小部件和几何管理器协商好它们的大小和位置为止。请参阅 .update_idletasks()
本节中上面的方法,了解如何确保小部件的几何形状是最新的。
w
.winfo_height()
返回当前高度(以
像素为单位)。请参阅上面关于几何更新的备注w
.winfo_geometry()
。您可能更喜欢使用.winfo_reqheight()
如下所述,它始终是最新的。
w
.winfo_id()
返回一个在其顶级窗口内 唯一标识的整数。您将需要w
.winfo_pathname()
在下面的方法中使用它。
w
.winfo_ismapped()
如果已映射, 此方法返回 true ,否则返回 false。如果一个小部件已经被网格化(或者放置或打包,如果您正在使用其他几何管理器之一)到其父级,并且如果其父级被映射,等等直到顶级窗口,则该小部件被映射。w
如果
尚未网格化(或通过其他几何管理器之一放置),则此方法返回一个空字符串。如果w
已进行网格化或以其他方式放置,它将返回一个命名几何管理器的字符串w
:该值将为w
'grid'
、'pack'
、'place'
、'canvas'
或之一'text'
。
此方法返回
相对于其父级的名称。请参见第 5.11 节“窗口名称”。另请参阅w
.winfo_pathname()
下面的 ,了解如何获取小部件的路径名。
返回的父窗口的路径名,如果是顶级窗口,
则返回空字符串。w
有关小部件路径名称的更多信息,请参阅上面 第 5.11 节“窗口名称” 。w
w
.winfo_pathname(id
, displayof
=0)
如果参数为 false,则返回应用程序主窗口中
具有唯一标识符的小部件的窗口路径名称。displayof
如果id
为 true,则该displayof
数字指定与 位于同一顶级窗口中的小部件id
。 有关小部件路径名称的讨论 ,请参见第 5.11 节“窗口名称” 。w
w
.winfo_pixels(number)
对于任何尺寸(请参阅上面的尺寸),此方法以整数形式返回显示屏
上的距离(以像素为单位)。number
w
w
.winfo_pointerx()
返回与返回的坐标 相同的值x
.winfo_pointerxy()
。
w
.winfo_pointerxy()
返回一个元组,其中包含鼠标指针相对于的根窗口的坐标。如果鼠标指针不在同一屏幕上,则返回。 (
x
, y
)w
(-1, -1)
w
.winfo_pointery()
返回与返回的坐标 相同的值y
.winfo_pointerxy()
。
这些方法返回请求的 widget 高度
。这是必要的最小高度,以便所有w
内容都有所需的空间。由于与几何经理协商,实际高度可能会有所不同。w
w
.winfo_reqwidth()
返回请求的 widget 宽度
,即包含所需的最小宽度w
。与 一样 .winfo_reqheight(),由于与几何管理器的协商,实际宽度可能会有所不同。w
w
.winfo_rgb(color)
对于任何给定的颜色,此方法返回等效的红-绿-蓝颜色规范作为 3 元组,其中每个数字都是 [0, 65536) 范围内的整数。例如,如果is ,则此方法返回 3-tuple 。 (
r
, g
, b
)color
'green'(0, 65535, 0)
有关指定颜色的更多信息,请参阅第 5.3 节“颜色”。
w
.winfo_rootx()
返回的根窗口
左侧相对于的父窗口的坐标。 x
ww
如果
有边框,则这是边框的外边缘。w
w
.winfo_rooty()
返回的根窗口
顶边相对于的父窗口的坐标。 y
ww
如果
有边框,则这是边框的上边缘。w
w
.winfo_screenheight()
返回屏幕的高度(以像素为单位)。
w
.winfo_screenmmheight()
返回屏幕的高度(以毫米为单位)。
w
.winfo_screenmmwidth()
返回屏幕的宽度(以毫米为单位)。
w
.winfo_screenvisual()
返回描述显示器色彩再现方法的字符串。这通常'truecolor'
适用于 16 位或 24 位显示器、 'pseudocolor'
256 色显示器。
w
.winfo_screenwidth()
返回屏幕的宽度(以像素为单位)。
w
.winfo_toplevel()
返回包含 的顶级窗口
。该窗口支持小部件上的所有方法w
Toplevel
;请参见第 25 节,“ Toplevel:顶级窗口方法”。
w
.winfo_viewable()
如果谓词可见,即如果它及其所有祖先都被映射, 则返回一个True
值。w
Toplevel
w
.winfo_width()
返回当前宽度(以
像素为单位)。请参阅上面关于几何更新的备注w
.winfo_geometry()
。您可能更喜欢使用.winfo_reqwidth()
上述方法;它始终是最新的。
w
.winfo_x()
返回相对于其父级
的左侧坐标。x
如果w
有边框,则这是边框的外边缘。w
w
.winfo_y()
返回相对于其父级
的顶边的坐标。y
如果w
有边框,则这是边框的外边缘。w