Tkinter 组件详解之Button
简介
Button(按钮)组件用于实现各种各样的按钮。Button 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被自动执行。
Button 组件仅能显示单一字体的文本,但文本可以跨越多行。另外,还可以为其中的个别字符加上下划线(例如用于表示键盘快捷键)。默认情况下,tab 按键被用于在按钮间切换。
何时使用 Button 组件?
简而言之,Button 组件是用于让用户说:“干!”,通过按钮上的文字或图标让用户清楚按下去是干什么用的。Button 组件常常被用于工具栏、应用程序窗口、和表示接受或拒绝的对话框。Checkbutton 和 Radiobutton
Checkbutton 和 Radiobutton 组件 更适合做数据输入按钮使用。
用法
普通的按钮是非常简单易用的。你所需要做的就是指定 Button 的内容(文本、位图或者图片),并且关联当按钮被按下时应该调用的函数或方法:
import tkinter as tk master = tk.Tk() def callback(): print("我被调用了!") b = tk.Button(master, text="执行", command=callback) b.pack() master.mainloop()
>>>
=============== RESTART===============
我被调用了!
如果一个按钮没有相关联的函数或方法,那么它就形同虚设。你可能在开发程序的过程中会使用到这样的按钮,在这种情况下,更好的方法是禁用这些按钮,从而避免导致你的测试用户产生疑惑。
b = tk.Button(master, text="不执行", state="disabled")
如果你没有指定 Label 的大小,那么 Label 的尺寸是正好可以容纳其内容而已。你可以使用 padx 和 pady 选项在 Button 的内容和边框间添加额外的间距。
当然你可以通过 height 和 width 选项来明确设置 Button 的大小:如果你显示的是文本,那么这两个选项是以文本单元为单位定义 Button 的大小;如果你显示的是位图或者图像,那么它们以像素为单位(或者其他屏幕单元)定义 Button 大小。
对于内容为文本的 Button 组件,你可以使用像素为单位指定 Buttton 的尺寸,不过这需要一些技巧。这里提供一个方法给大家参考(还有其它方法实现):
f = tk.Frame(master, height=64, width=64) f.pack_propagate(0) f.pack() b = tk.Button(f, text="确定", command=callback) b.pack(fill="both", expand=1)
Button 可以显示多行文本,你可以直接使用换行符或使用 wraplength 选项来实现。当文本换行的时候,你可以使用 anchor 和 justify 以及 padx 选项来使得文本如你所希望的显示出来:
longtext = """ 我明明只是一个按钮, 作为按钮并不需要太多 的文字用于告诉用户当 我被按下的时候会发生 什么事情,但我为什么 这么长? """ b = tk.Button(master, text=longtext, anchor="w", justify="left", padx=2, command=callback) b.pack()
为了使一个普通的按钮保持被“按下”的状态,例如你希望通过某种方式实现一个工具箱(像 Photoshop 左侧的工具栏按钮,按下的时候他保持凹下去,说明你正在使用此工具),你可以简单的将 relief 选项的默认值 "raised" 改为 "sunken":
b.config(relief="raised")
你或许也希望修改背景色。不过更好的方法是使用 Checkbutton 和 Radiobutton 组件,并把它们的 indicatoron 选项设置为 False:
b = tk.Checkbutton(master, image=bold, variable=var, indicatoron=False)
在早期版本的 Tkinter 中,image 选项会覆盖 text 选项。也就是说如果你同时指定了两个选项,那么只有 image 选项会被显示。但在新的 Tkinter 中,你可以使用 compound 选项设置二者的混合模式。例如下边就是通过设置 compound="center" 使得文字位于图片的上方(重叠显示):
photo = tk.PhotoImage(file = 'botton.gif') b = tk.Button(master, text="点我", font = 20, image = photo, compound = "center") b.pack()
通过 "left","right","top" 和 "bottom" 则可以设置文字在图像的旁边显示:
b = tk.Button(master, text="点它 ->", font = 20, image = photo, compound = "right")
command带处理函数
1.处理函数无参,直接写。
#!/usr/bin/python # -*- coding: UTF-8 -*- import tkinter import tkinter.messagebox #弹窗库 top = tkinter.Tk() def helloCallBack(): tkinter.messagebox.showinfo("Hello Python", "Hello Runoob") #tkMessageBox.showinfo("Hello Python", "Hello Runoob") B = tkinter.Button(top, text="点我", command=helloCallBack) B.pack() top.mainloop()