大家好,本文将围绕python中按钮的位置怎么摆放展开说明,python中按钮怎么设置颜色是一个很多人都想弄明白的事情,想搞清楚python按钮怎么创建需要先了解以下几个事情。
Source code download: 本文相关源码
第5章 按钮控件(Button)
5.1 按钮控件介绍
按钮是一个标准的tkinter控件。按钮上可以显示文字或者图片作为提示信息python简单新年祝福代码。文字只能使用一种字体以及颜色。按钮的最主要作用是被点击后,可以调用指定的回调函数,完成特定的功能。比如,关闭窗口、执行命令等。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Button(root,text="Quit",command=root.destroy)
b1.pack()
root.mainloop()
结果:
这个小程序展示了按钮控件的基本功能。点击按钮后,回调设定好的函数。本程序的功能是退出应用,并关闭窗口。
5.2 按钮的属性
按钮控件的属性如下:
属性 | 描述 |
---|---|
activebackground | 按钮按下时背景颜色。默认是系统指定的颜色。 |
activeforeground | 按钮按下时前景颜色。默认是系统指定的颜色。 |
anchor | 采用何种方式锚定文字或者图片。默认是CENTER(居中模式)。可以选择如下方式: N, NE, E, SE, S, SW, W, NW, or CENTER. |
background bg | 按钮的背景颜色。默认是系统指定颜色 |
bitmap | bitmap形式显示按键。如果设置了images属性,则忽略bitmap属性。 |
borderwidth bd | 按钮的边缘宽度。一般是1~2个像素值。 |
command | 设置回调函数。当按钮被按下时,会调用该函数。如果该属性没有设置,按下按钮时,不会有任何动作发生。 |
compound | 在按钮上同时显示文字和图片。默认的模式是如果提供了图片,会只显示图片。但是,如果将选项设为: CENTER:在图片中间叠加显示文字 BOTTOM:在图片下方显示文字 LEFT:在图片左边显示文字 RIGHT:在图片右边显示文字 TOP:在图片顶部显示文字 NONE:不显示文字 |
cursor | 当鼠标移动经过按钮的时候,显示光标 |
default | 取值有normal,active和disabled三个。 |
disabledforeground | 按钮被禁止使用时,按时上的文字的颜色 |
font | 按钮上文字的字体。只能选择一种字体显示。 |
foreground fg | 按钮上文字或者位图的颜色 |
height | 设置按钮的高度。如果是显示文字,数值是文字单位。如果是显示图片,数值单位为像素。如果没有设置,系统自动计算按钮的高度。 |
highlightbackground | 当按钮失去焦点的时候,显示按钮边框的高亮颜色 |
highlightcolor | 当按钮获得焦点的时候,显示按钮边框的高亮颜色 |
highlightthickness | 设置高亮边框的宽度 |
image | 设置按钮显示的图片。如果该选项被设置,会取代text或bitmap选项。 |
justify | 当按钮有多行文字时,设置文字的对齐方式。可设的数值有: LEFT,RIGHT,CENTER |
overrelief | 当鼠标移动经过的时候,按钮显示浮雕效果。如果没有设定,会使用relief中的值。 |
padx | 在水平方向上,按钮边框和文字或图像之间的填充(pad) |
pady | 在垂直方向上,按钮边框和文字或图像之间的填充(pad) |
relief | 按钮3D美化效果。通常情况下,按钮被按下时,是SUNKEN效果,释放时是RAISED效果。其他的可选项包括:GROOVE,RIDGE以及FLAT |
state | 按钮的状态,包括:NORMAL, ACTIVE 或者 DISABLED |
takefocus | 标识用户是否能够使用Tab键选中按钮。取值是True,False或者None |
text | 显示在按钮上的文字。如果使用了bitmap或者image,该选项被忽略 |
textvariable | 将tkinter变量与按钮相关联。如果变量的内容发生变化,按钮的文字也随之更新。 |
underline | 标识在那个字符下显示下划线。默认值是-1,标识没有字符下面显示下划线 |
width | 设置按钮的宽度。参考height属性 |
wraplength | 确定按钮上文字超过多长时,文字会被折叠成多行。单位是像素。默认值是0. |
5.2.1 activebackground 和activeforeground
定义按钮在ACTIVE状态时,背景颜色和文字的颜色。这两个属性可以用来突出显示文本,或者某些特殊效果。
代码
import tkinter as tk
root=tk.Tk()
root.geometry(‘300x240’)
b1 = tk.Button(root,text=“Quit”,activebackground=‘blue’,
activeforeground=‘yellow’,command=root.destroy)
b1.pack()
root.mainloop()
结果:
5.2.2 anchor
anchor的作用是如何控制文字的显示。参见3.3.4节。看下面anchor=tk.SW的例子。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='Quit',anchor=tk.SW,
height=5,width=20,command=root.destroy)
b1.pack()
root.mainloop()
结果:
按钮上的文字,不是通常的居中显示,而是显示在左下角了。这就是anchor的作用。
5.2.3 background(bg)
设置按钮的背景颜色。bg是缩写格式。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='Quit',height=3,width=20,
bg='yellow',command=root.destroy)
b1.pack()
root.mainloop()
结果:
说明:背景的颜色被设置为黄色。
5.2.4 bitmap
在按钮上显示图片。这个bitmap不是windows系统中的常用的bitmap。不建议使用bitmap。如果是要使用图片,可以使用image属性来设置,支持gif、png等常见的格式。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,bitmap='@x.xbm',
bg='yellow', command=root.destroy)
b1.pack()
root.mainloop()
结果:
5.2.5 borderwidth(bd)
定义按钮的边框宽度。bd是缩写格式。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',height=3,width=20,
bd=10,bg='yellow',command=root.destroy)
b1.pack()
root.mainloop()
结果:
5.2.6 command
command是用来设定回调函数的,也就是说按下按钮后,调用特定的函数实现一定的功能。以前的例子只是简单的调用系统的destroy()函数,在真正的使用中,肯定是要调用比较复杂的函数的。
其中一个关键的问题就是参数传递了。在command中,是没有括号的,是不能显式的把参数传递给回调函数的。这么做的重要原因就是,在按钮实例化的时候,就把参数传递给回调函数是没有意义的。回调函数的参数应该在程序中动态的确认,而不是简单的在实例化的时候就确认了。
那么如何传递参数给回调函数呢?一个简单的方法就是使用全局变量。但是这个方法不是最好的。全局变量多了,对程序的可维护性是一种破坏,也会带来潜在的bug。
第二种方法是使用类。把回调函数以及相应的参数都定义在类里面,使用类的内部变量,可以减少对其他程序的影响。这种方法使用是最普遍的。
还有一种方法是使用匿名函数lambda的方法。lambda可以让开发人员定义简单的函数而不用起名字。比如:
a=lambda x,y,z:xyz
print(a(1,2,3))
得到的结果是123=6。在按钮的回调函数中,也可以定义类似的匿名回调函数,从而满足传递参数的功能。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b2=tk.Label(root,text='测试文本')
b2.pack()
b3 = tk.Entry(root,width=20)
b3.pack()
def change_b2(label,text):
label['text']=text.get()
b1=tk.Button(root,text='改变标签文字',height=3,
width=20,bg='yellow',
command=lambda :change_b2(b2,b3))
b1.pack()
root.mainloop()
结果:
可以看到,使用lambda可以直接把参数传递给回调函数。其实实现的机制是按钮是把lambda当成回调函数,不过实际调用的时候,替换为我们期望的处理函数。
5.2.7 compound
见第四章关于compound用法的说明。
5.2.8 cursor
鼠标经过按钮时,显示的光标。光标形状说明3.3.6节。
5.2.9 default
取值为ACTIVE,NORMAL和DISABLED。
5.2.10 disabledforeground
按钮被禁止使用时,按钮上的文本的颜色。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='禁止使用按钮',
height=3,width=20,state=tk.DISABLED,
disabledforeground='blue',
command=root.destroy)
b1.pack()
root.mainloop()
结果:
5.2.11 font
设置按钮上文本的字体,参见3.3.3节的说明。
5.2.12 foreground 和fg
设置按钮上的文本的颜色。这个是按钮的状态为正常的情况下的文本颜色。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='正常按钮',
height=3,width=20,
fg='yellow',
command=root.destroy)
b1.pack()
root.mainloop()
结果:
5.2.13 highlightbackground,highlightcolor和highlightthickness
分别对应按钮没有获得焦点时边框的颜色(highlightbackground)、按钮获得焦点时边框的颜色(highlightcolor)以及边框的宽度(highlightthickness)。不过对于按钮控件而言,这三个参数不起作用。
5.2.14 image
在按钮上显示图片。当使用image属性时,text与bitmap属性会被屏蔽。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
p = tk.PhotoImage(file="a.gif")
b1=tk.Button(root,height=80,width=100,
image=p,command=root.destroy)
b1.pack()
root.mainloop()
结果:
5.2.15 justify
按钮上显示多行文本时的对齐方式。具体的说明见第四章。
5.2.16 overrelief
设置鼠标经过按钮时的3D效果。取值与relief一样。当鼠标指针位于按钮区域时,会根据设置显示对应的3D效果
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,height=4,width=10,text='退出',
bd=10,command=root.destroy,
overrelief='sunken')
b1.pack()
root.mainloop()
结果:
当鼠标移动到按钮的上方,会改变3D外观。
5.2.17 padx 和 pady
文字或者图像与按钮边框之间的内边距。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',
padx=10,pady=10,command=root.destroy)
b1.pack()
b2=tk.Button(root,text='退出',
command=root.destroy)
b2.pack()
root.mainloop()
结果:
第一个按钮就是设置了padx和pady的效果。而第二个按钮没有设置padx和pady。可以发现第一个按钮的文字距离边框比第二个要远一些。这就是padx和pady的作用。
5.2.18 relief
按钮的3D效果。在一般的情况下,按钮按下时是sunken效果,释放时时raised效果。可以通过设置此属性改变按钮释放时的效果,但是并不影响按下时的效果。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',bd=10,
command=root.destroy,relief='solid')
b1.pack()
root.mainloop()
结果:
5.2.19 state
设置按钮的状态。状态有三种:NORMAL,ACTIVE和DISABLED。NORMAL和ACTIVE的作用是一样的,按钮都可以正常使用。而DISABLED会禁止按钮的使用,按钮会灰化,并且无法按下。具体的用法见5.2.10中的例子。
5.2.20 takefocus
设定是否可以使用Tab来选中按钮。True为可以使用Tab键选中,False为不能。下面的代码就是可以选中的例子。被Tab选中的按钮,会有一个虚框出现在按钮上。此时按动空格键,就可以激活该按钮的功能。如果没有这个虚框,就只能用鼠标点击来激活按钮的功能了。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',bd=5,
command=root.destroy,takefocus=True)
b1.pack()
root.mainloop()
结果:
5.2.21 text
用来设定按钮上的文字。前面很多章节都有使用的例子了,这里不再赘述了。
5.2.22 textvariable
用来改变按钮上的文字。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
btn_text=tk.StringVar()
def btn_change():
btn_text.set('改变文字')
btn_text.set('退出')
b1=tk.Button(root,bd=5, command=btn_change,
textvariable=btn_text)
b1.pack()
root.mainloop()
结果:
5.2.23 underline
标识在那个字母下面有下划线。对中文也有效。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,bd=5, command=root.destroy,
text='退出',underline=1)
b1.pack()
root.mainloop()
结果:
5.2.24 width和height
设定按钮的宽度。对于文字是按照文字的宽度,而对于图像则是以像素为单位。具体的用法见前面的章节的例子。
5.2.25 wraplength
和第四章中的wraplength一样的用法,可参照。