赞
踩
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
tkinter 类 | 元素 | 说明 |
---|---|---|
Button | 按钮 | 在程序中显示按钮 |
Canvas | 画布 | 提供绘制功能 |
Checkbutton | 多选框 | 在程序中显示多选框 |
Combobox | 下拉框 | 显示下拉框 |
Entry | 输入框 | 显示单行文本内容 |
Frame | 框架 | 用于放置其他窗口部件 |
Label | 标签 | 显示文本或位图 |
Listbox | 列表框 | 显示选择列表 |
Menu | 菜单 | 显示菜单栏 |
Message | 消息框 | 类似与标签,可以显示多行文本 |
Radiobutton | 单选按钮 | 显示单选按钮 |
Scale | 进度条 | 线性滑块组件 |
Scrollbar | 滚动条 | 显示一个滚动条 |
Text | 文本框 | 显示多行文本 |
messagebox | 消息框 | 弹出一个消息框 |
OPtions
编辑技巧通过设置OPtions设置组件的属性,从而控制组件的各种状态,如高宽文字字体、背景色等。
可通过以下三种方式设置OPtions
组件的选项:
fred = Button(self, fg="red", bg="blue")
fred = Button(self)
fred["fg"] = "red"
fred["bg"] = "blue"
config()
方法fred = Button(self)
fred.config(fg= "red", bg = "blue")
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
属性 | 描述 |
---|---|
Dimension | 控件大小 |
Color | 控件颜色 |
Font | 控件字体 |
Anchor | 锚点 |
Relief | 控件样式 |
Bitmap | 位图 |
Cursor | 光标移动到对应组件时的样式 |
root.geometry("1785x950+100+100")
设置窗口尺寸
root.resizable(False, False)
不可调整大小
root.wm_attributes('-topmost', 1)
窗口置顶
root.title("xxx")
设置标题
以下部分获取宽高的方法需要先执行root.updata()
方法,不然拿到的是默认值.
root.winfo_screenwidth()
获取屏幕宽root.winfo_screenheight()
获取屏幕高度root.winfo_height()
# 返回此小部件的高度。root.winfo_width()
# 返回此小部件的宽度。root.winfo_rootx
# 返回该小部件左上角的x坐标 根窗口。root.winfo_rooty
# 返回该小部件左上角的y坐标 根窗口。root.winfo_x()
# 返回此小部件左上角的x坐标 相对父组件root.winfo_y()
# 返回此小部件左上角的y坐标 相对父组件root.winfo_pointerx()
# 返回根窗口上指针的x坐标。root.winfo_pointery()
# 返回根窗口上指针的y坐标root.winfo_pointerxy()
# 返回根窗口上指针的x和y坐标的元组。root.winfo_cells()
# 返回此小部件的colormap中的单元格数。root.winfo_containing(rootX, rootY)
# 返回位于根坐标ROOTX,ROOTY的小部件。root.winfo_name()
# 返回此小部件的名称。root.winfo_exists()
# 如果此小部件存在,则返回true。root.winfo_ismapped()
# 如果这个小部件被映射,则返回true。root.winfo_depth()
# 返回每个像素的位数。root.winfo_manager()
# 返回此小部件的窗口管理器名称。root.winfo_parent()
# 返回此小部件的父项的名称。root.winfo_reqheight()
# 返回此小部件的请求高度。root.winfo_reqwidth()
# 返回此小部件的请求宽度。root.winfo_screen()
# 返回此小部件的屏幕名称。root.winfo_screendepth()
# 返回此小部件屏幕的根窗口的每像素位数。root.winfo_screenwidth()
# 返回此小部件屏幕宽度的像素数,单位为像素。root.winfo_screenheight()
# 返回此小部件屏幕高度的像素数,单位为像素。root.winfo_screencells()
# 返回此小部件屏幕的颜色映射中的单元格数。root.winfo_screenmmheight()
# 返回此小部件屏幕高度的像素数,单位为mm。root.winfo_screenmmwidth()
# 返回此小部件屏幕宽度的像素数,单位为mmiconbitmap()
将窗口图标设置为 bitmap。参数必须传入一个ico类型位图,不能为 png 或 jpg 等其他类型
iconphoto()
可以实现将png格式的图像设置为窗口图标。
window.iconphoto(False, tk.PhotoImage(file='头像.png'))
第一参数False 表示该图标图像仅适用于该特定窗口,而不适用于将来创建的 toplevels 窗口;如果设置为True ,则图标图像也将应用于以后创建的所有 toplevels 图像。
tk.call()
方法是 tkinter 到 tcl 解释器的接口,可以用 call 方法运行 tcl 命令。
需要将图像设置为 tk.PhotoImage 而不是图像本身,否则会出现 tkinter.TclError 错误。
window.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(file='头像.png'))
# 更改窗口图标
点击tkinter窗口程序的关闭按钮(X,一般在右上角),窗口会被关闭,这个过程实际上调用了窗口的destroy函数
下面介绍如何响应这个窗口关闭事件,不让tkinter系统自动调用destroy函数,而是调用一个自定义的函数,或者先运行一段自定义的代码,最后自己再调用destroy。
root = TK()
def close_callback():
"""
do something
"""
root.destroy()
root.protocol('WM_DELETE_WINDOW', close_callback)# 自定义回调方法
root.protocol('WM_DELETE_WINDOW', root.iconify)# 窗口最小化
root.protocol('WM_DELETE_WINDOW', root.destroy) # 直接关闭
当批量创建组件时,如批量创建Button又全都绑定了方法时,会发现点击所有按钮效果都会是最后一个按钮的效果,此时需要将lambda 函数的写法改一下
command=lambda: show_color(c_text, single_color)
只有一个按钮时没有问题,当批量创建就有问题.
command=lambda l_text=c_text, l_color=single_color: show_color(l_text, l_color)
在lambda方法中声明参数,这样每个传递过去的参数都不一样
tkinter中在多选框、单项框、Entry等组件中往往需要绑定一个独立的变量,这个变量需要绑定成tkinter专属变量。
构造一个变量。
from tkinter import BooleanVar, StringVar, IntVar
tk_str = StringVar()
tk_Bol = BooleanVar()
tk_int = IntVar()
定义时参数
def __init__(self,
master: Misc | None = ...,
value: bool | None = ...,
name: str | None = ...) -> None
master
:可以作为master widget给出。value
:是可选值,BooleanVar默认为False,StringVar默认为"",IntVar默认为0name
:是可选的Tcl名称 (默认为PY_VARnum)。# 设置值,常用于设置某些默认值
tk_str.set(value:str)
tk_Bol.set(value:bool)
tk_int.set(value:int)
tk_str.get()
tk_Bol.get()
tk_int.get()
cursor
鼠标形状可选参数在按钮等组件可以设置鼠标变形参数,设置cursor为以下相应参数即可.
在不同系统中样式可能会有出入,以下是win10中的默认鼠标样式时的显示样式。
属性 | 效果 | 属性 | 效果 |
---|---|---|---|
arrow | pirate | ||
circle | plus | ||
clock | shuttle | ||
cross | sizing | ||
dotbox | spider | ||
exchange | spraycan | ||
fleur | star | ||
hand2 | target | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCnon6xc-1688479515857)(https://gitcode.net/qq_40597070/pic_go/raw/master/202201061555952.webp)] | |
heart | tcross | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-92812jU3-1688479515858)(https://gitcode.net/qq_40597070/pic_go/raw/master/202201061555900.webp)] | |
man | trek | ||
mouse | watch |
可以向Text
、Label
、Button
等小组件中插入图片展示。
但Tkinter
只支持gif等少数几个格式图像,可利用PIL.ImageTk.PhotoImage
来获得更多图片支持。
推荐使用``PIL.ImageTk.PhotoImage`模块,支持更多图片不受格式限制,同时处理图像更方便。
from tkinter import Label, Tk, PhotoImage
def show_image(image_path: str, show_label: Label):
image = PhotoImage(file=image_path) # 可设置宽高,大图是裁剪模式,width=600, height=600
show_label.config(image=image)
show_label.image = image
root = Tk()
root.geometry(f"200x200")
test_label = Label(root)
test_label.place(relx=0, rely=0, relwidth=1, relheight=1)
show_image("./png图.png", test_label)
root.mainloop()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKdFaAae-1688479515859)(C:\Users\Hi\AppData\Roaming\Typora\typora-user-images\image-20221206235047230.png)]
PIL.ImageTk.PhotoImage
模块pillow模块支持更多的图片格式,如jpg格式用用tkinter写法则会报错。
from tkinter import Label, Tk
from PIL.ImageTk import PhotoImage
def show_image(image_path: str, show_label: Label):
image = PhotoImage(file=image_path) # 可设置宽高,大图是裁剪模式,width=600, height=600
show_label.config(image=image)
show_label.image = image
root = Tk()
root.geometry(f"200x200")
test_label = Label(root)
test_label.place(relx=0, rely=0, relwidth=1, relheight=1)
show_image("./jpg图.jpg", test_label)
root.mainloop()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-roCIGkND-1688479515859)(C:\Users\Hi\AppData\Roaming\Typora\typora-user-images\image-20221206235128058.png)]
还可这么写在插入图片前对图像进行处理,如下例子在插入图片前进行了缩放操作。
from tkinter import Label, Tk
from PIL import ImageTk, Image
def show_image(image_path, show_label):
pil_image = Image.open(image_path)
resize_image = pil_image.resize(size=(200, 200)) # 缩放
image = ImageTk.PhotoImage(image=resize_image)
show_label.config(image=image)
show_label.image = image
root = Tk()
root.geometry(f"200x200")
test_label = Label(root)
test_label.place(relx=0, rely=0, relwidth=1, relheight=1)
show_image("./jpg图.jpg", test_label)
root.mainloop()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8arZxoAU-1688479515860)(C:\Users\Hi\AppData\Roaming\Typora\typora-user-images\image-20221206234943646.png)]
由于python的垃圾回收机制,Python 通过垃圾收集的过程自动删除对变量的引用,导致在方法重定义图片就会导致图像无法正常显示。解决方案是保存参考或创建新参考
如下所示,本应该在点击按钮时显示图片的,但是实际点击并不显示。这个就是由于python垃圾回收机导致。
from tkinter import Tk
from tkinter.ttk import Label, Button
from PIL import Image, ImageTk
class demo:
def __init__(self, win):
self.root = win
self.gui_init()
def gui_init(self):
show_image = Label(self.root, relief="solid")
show_but = Button(self.root, text="展示图片", command=lambda: self.updata_image(show_image))
show_but.place(relx=0.33, rely=0.01, relwidth=0.33, relheight=0.08)
show_image.place(relx=0.01, rely=0.1, relwidth=0.98, relheight=0.9)
def updata_image(self, show_area: Label):
image = ImageTk.PhotoImage(image=Image.open("./png图.png"))
show_area.config(image=image)
if __name__ == '__main__':
root = Tk()
root.geometry("300x300")
demo(root)
root.mainloop()
基于以上问题提出三种解决办法,推荐前两种。
给图片变量先坐一个全局声明这样就不会在后面被垃圾机制删除
from tkinter import Tk
from tkinter.ttk import Label, Button
from PIL import Image, ImageTk
global image
class demo:
def __init__(self, win):
self.root = win
self.gui_init()
def gui_init(self):
show_image = Label(self.root, relief="solid")
show_but = Button(self.root, text="展示图片", command=lambda: demo.updata_image(show_image))
show_but.place(relx=0.33, rely=0.01, relwidth=0.33, relheight=0.08)
show_image.place(relx=0.01, rely=0.1, relwidth=0.98, relheight=0.9)
@staticmethod
def updata_image(show_area: Label):
global image
image = ImageTk.PhotoImage(image=Image.open("./png图.png"))
show_area.config(image=image)
if __name__ == '__main__':
root = Tk()
root.geometry("300x300")
demo(root)
root.mainloop()
from tkinter import Tk
from tkinter.ttk import Label, Button
from PIL import Image, ImageTk
class demo:
def __init__(self, win):
self.root = win
self.gui_init()
self.pil_image = None
def gui_init(self):
show_image = Label(self.root, relief="solid")
show_but = Button(self.root, text="展示图片", command=lambda: self.updata_image(show_image))
show_but.place(relx=0.33, rely=0.01, relwidth=0.33, relheight=0.08)
show_image.place(relx=0.01, rely=0.1, relwidth=0.98, relheight=0.9)
def updata_image(self, show_area: Label):
self.pil_image = ImageTk.PhotoImage(image=Image.open("./png图.png"))
show_area.config(image=self.pil_image)
if __name__ == '__main__':
root = Tk()
root.geometry("300x300")
demo(root)
root.mainloop()
如下所有在方法中重新设置Label的image参数后,补充一句show_area.image = image
这种方式在pycharm中会发出黄色警告提示,但运行正常。
from tkinter import Tk
from tkinter.ttk import Label, Button
from PIL import Image, ImageTk
class demo:
def __init__(self, win):
self.root = win
self.gui_init()
def gui_init(self):
show_image = Label(self.root, relief="solid")
show_but = Button(self.root, text="展示图片", command=lambda: demo.updata_image(show_image))
show_but.place(relx=0.33, rely=0.01, relwidth=0.33, relheight=0.08)
show_image.place(relx=0.01, rely=0.1, relwidth=0.98, relheight=0.9)
@staticmethod
def updata_image(show_area: Label):
pil_image = ImageTk.PhotoImage(image=Image.open("./png图.png"))
show_area.config(image=pil_image)
show_area.image = pil_image
if __name__ == '__main__':
root = Tk()
root.geometry("300x300")
demo(root)
root.mainloop()
tkinter
中的颜色[['#FFB6C1 LightPink 浅粉红', ['#FFB6C1', 'LightPink', '浅粉红']],
['#FFC0CB Pink 粉红', ['#FFC0CB', 'Pink', '粉红']],
['#DC143C Crimson 深红/猩红', ['#DC143C', 'Crimson', '深红/猩红']],
['#FFF0F5 LavenderBlush 淡紫红', ['#FFF0F5', 'LavenderBlush', '淡紫红']],
['#DB7093 PaleVioletRed 弱紫罗兰红', ['#DB7093', 'PaleVioletRed', '弱紫罗兰红']],
['#FF69B4 HotPink 热情的粉红', ['#FF69B4', 'HotPink', '热情的粉红']],
['#FF1493 DeepPink 深粉红', ['#FF1493', 'DeepPink', '深粉红']],
['#C71585 MediumVioletRed 中紫罗兰红', ['#C71585', 'MediumVioletRed', '中紫罗兰红']],
['#DA70D6 Orchid 暗紫色/兰花紫', ['#DA70D6', 'Orchid', '暗紫色/兰花紫']],
['#D8BFD8 Thistle 蓟色', ['#D8BFD8', 'Thistle', '蓟色']],
['#DDA0DD Plum 洋李色/李子紫', ['#DDA0DD', 'Plum', '洋李色/李子紫']],
['#EE82EE Violet 紫罗兰', ['#EE82EE', 'Violet', '紫罗兰']],
['#FF00FF Magenta 洋红/玫瑰红', ['#FF00FF', 'Magenta', '洋红/玫瑰红']],
['#FF00FF Fuchsia 紫红/灯笼海棠', ['#FF00FF', 'Fuchsia', '紫红/灯笼海棠']],
['#8B008B DarkMagenta 深洋红', ['#8B008B', 'DarkMagenta', '深洋红']],
['#800080 Purple 紫色', ['#800080', 'Purple', '紫色']],
['#BA55D3 MediumOrchid 中兰花紫', ['#BA55D3', 'MediumOrchid', '中兰花紫']],
['#9400D3 DarkViolet 暗紫罗兰', ['#9400D3', 'DarkViolet', '暗紫罗兰']],
['#9932CC DarkOrchid 暗兰花紫', ['#9932CC', 'DarkOrchid', '暗兰花紫']],
['#4B0082 Indigo 靛青/紫兰色', ['#4B0082', 'Indigo', '靛青/紫兰色']],
['#8A2BE2 BlueViolet 蓝紫罗兰', ['#8A2BE2', 'BlueViolet', '蓝紫罗兰']],
['#9370DB MediumPurple 中紫色', ['#9370DB', 'MediumPurple', '中紫色']],
['#7B68EE MediumSlateBlue 中暗蓝色/中板岩蓝', ['#7B68EE', 'MediumSlateBlue', '中暗蓝色/中板岩蓝']],
['#6A5ACD SlateBlue 石蓝色/板岩蓝', ['#6A5ACD', 'SlateBlue', '石蓝色/板岩蓝']],
['#483D8B DarkSlateBlue 暗灰蓝色/暗板岩蓝', ['#483D8B', 'DarkSlateBlue', '暗灰蓝色/暗板岩蓝']],
['#E6E6FA Lavender 淡紫色/熏衣草淡紫', ['#E6E6FA', 'Lavender', '淡紫色/熏衣草淡紫']],
['#F8F8FF GhostWhite 幽灵白', ['#F8F8FF', 'GhostWhite', '幽灵白']],
['#0000FF Blue 纯蓝', ['#0000FF', 'Blue', '纯蓝']],
['#0000CD MediumBlue 中蓝色', ['#0000CD', 'MediumBlue', '中蓝色']],
['#191970 MidnightBlue 午夜蓝', ['#191970', 'MidnightBlue', '午夜蓝']],
['#00008B DarkBlue 暗蓝色', ['#00008B', 'DarkBlue', '暗蓝色']],
['#000080 Navy 海军蓝', ['#000080', 'Navy', '海军蓝']],
['#4169E1 RoyalBlue 皇家蓝/宝蓝', ['#4169E1', 'RoyalBlue', '皇家蓝/宝蓝']],
['#6495ED CornflowerBlue 矢车菊蓝', ['#6495ED', 'CornflowerBlue', '矢车菊蓝']],
['#B0C4DE LightSteelBlue 亮钢蓝', ['#B0C4DE', 'LightSteelBlue', '亮钢蓝']],
['#778899 LightSlateGray 亮蓝灰/亮石板灰', ['#778899', 'LightSlateGray', '亮蓝灰/亮石板灰']],
['#708090 SlateGray 灰石色/石板灰', ['#708090', 'SlateGray', '灰石色/石板灰']],
['#1E90FF DodgerBlue 闪兰色/道奇蓝', ['#1E90FF', 'DodgerBlue', '闪兰色/道奇蓝']],
['#F0F8FF AliceBlue 爱丽丝蓝', ['#F0F8FF', 'AliceBlue', '爱丽丝蓝']],
['#4682B4 SteelBlue 钢蓝/铁青', ['#4682B4', 'SteelBlue', '钢蓝/铁青']],
['#87CEFA LightSkyBlue 亮天蓝色', ['#87CEFA', 'LightSkyBlue', '亮天蓝色']],
['#87CEEB SkyBlue 天蓝色', ['#87CEEB', 'SkyBlue', '天蓝色']],
['#00BFFF DeepSkyBlue 深天蓝', ['#00BFFF', 'DeepSkyBlue', '深天蓝']],
['#ADD8E6 LightBlue 亮蓝', ['#ADD8E6', 'LightBlue', '亮蓝']],
['#B0E0E6 PowderBlue 粉蓝色/火药青', ['#B0E0E6', 'PowderBlue', '粉蓝色/火药青']],
['#5F9EA0 CadetBlue 军兰色/军服蓝', ['#5F9EA0', 'CadetBlue', '军兰色/军服蓝']],
['#F0FFFF Azure 蔚蓝色', ['#F0FFFF', 'Azure', '蔚蓝色']],
['#E0FFFF LightCyan 淡青色', ['#E0FFFF', 'LightCyan', '淡青色']],
['#AFEEEE PaleTurquoise 弱绿宝石', ['#AFEEEE', 'PaleTurquoise', '弱绿宝石']],
['#00FFFF Cyan 青色', ['#00FFFF', 'Cyan', '青色']],
['#00FFFF Aqua 浅绿色/水色', ['#00FFFF', 'Aqua', '浅绿色/水色']],
['#00CED1 DarkTurquoise 暗绿宝石', ['#00CED1', 'DarkTurquoise', '暗绿宝石']],
['#2F4F4F DarkSlateGray 暗瓦灰色/暗石板灰', ['#2F4F4F', 'DarkSlateGray', '暗瓦灰色/暗石板灰']],
['#008B8B DarkCyan 暗青色', ['#008B8B', 'DarkCyan', '暗青色']],
['#008080 Teal 水鸭色', ['#008080', 'Teal', '水鸭色']],
['#48D1CC MediumTurquoise 中绿宝石', ['#48D1CC', 'MediumTurquoise', '中绿宝石']],
['#20B2AA LightSeaGreen 浅海洋绿', ['#20B2AA', 'LightSeaGreen', '浅海洋绿']],
['#40E0D0 Turquoise 绿宝石', ['#40E0D0', 'Turquoise', '绿宝石']],
['#7FFFD4 Aquamarine 宝石碧绿', ['#7FFFD4', 'Aquamarine', '宝石碧绿']],
['#66CDAA MediumAquamarine 中宝石碧绿', ['#66CDAA', 'MediumAquamarine', '中宝石碧绿']],
['#00FA9A MediumSpringGreen 中春绿色', ['#00FA9A', 'MediumSpringGreen', '中春绿色']],
['#F5FFFA MintCream 薄荷奶油', ['#F5FFFA', 'MintCream', '薄荷奶油']],
['#00FF7F SpringGreen 春绿色', ['#00FF7F', 'SpringGreen', '春绿色']],
['#3CB371 MediumSeaGreen 中海洋绿', ['#3CB371', 'MediumSeaGreen', '中海洋绿']],
['#2E8B57 SeaGreen 海洋绿', ['#2E8B57', 'SeaGreen', '海洋绿']],
['#F0FFF0 Honeydew 蜜色/蜜瓜色', ['#F0FFF0', 'Honeydew', '蜜色/蜜瓜色']],
['#90EE90 LightGreen 淡绿色', ['#90EE90', 'LightGreen', '淡绿色']],
['#98FB98 PaleGreen 弱绿色', ['#98FB98', 'PaleGreen', '弱绿色']],
['#8FBC8F DarkSeaGreen 暗海洋绿', ['#8FBC8F', 'DarkSeaGreen', '暗海洋绿']],
['#32CD32 LimeGreen 闪光深绿', ['#32CD32', 'LimeGreen', '闪光深绿']],
['#00FF00 Lime 闪光绿', ['#00FF00', 'Lime', '闪光绿']],
['#228B22 ForestGreen 森林绿', ['#228B22', 'ForestGreen', '森林绿']],
['#008000 Green 纯绿', ['#008000', 'Green', '纯绿']],
['#006400 DarkGreen 暗绿色', ['#006400', 'DarkGreen', '暗绿色']],
['#7FFF00 Chartreuse 黄绿色/查特酒绿', ['#7FFF00', 'Chartreuse', '黄绿色/查特酒绿']],
['#7CFC00 LawnGreen 草绿色/草坪绿', ['#7CFC00', 'LawnGreen', '草绿色/草坪绿']],
['#ADFF2F GreenYellow 绿黄色', ['#ADFF2F', 'GreenYellow', '绿黄色']],
['#556B2F DarkOliveGreen 暗橄榄绿', ['#556B2F', 'DarkOliveGreen', '暗橄榄绿']],
['#9ACD32 YellowGreen 黄绿色', ['#9ACD32', 'YellowGreen', '黄绿色']],
['#6B8E23 OliveDrab 橄榄褐色', ['#6B8E23', 'OliveDrab', '橄榄褐色']],
['#F5F5DC Beige 米色/灰棕色', ['#F5F5DC', 'Beige', '米色/灰棕色']],
['#FAFAD2 LightGoldenrodYellow 亮菊黄', ['#FAFAD2', 'LightGoldenrodYellow', '亮菊黄']],
['#FFFFF0 Ivory 象牙色', ['#FFFFF0', 'Ivory', '象牙色']],
['#FFFFE0 LightYellow 浅黄色', ['#FFFFE0', 'LightYellow', '浅黄色']],
['#FFFF00 Yellow 纯黄', ['#FFFF00', 'Yellow', '纯黄']],
['#808000 Olive 橄榄', ['#808000', 'Olive', '橄榄']],
['#BDB76B DarkKhaki 暗黄褐色/深卡叽布', ['#BDB76B', 'DarkKhaki', '暗黄褐色/深卡叽布']],
['#FFFACD LemonChiffon 柠檬绸', ['#FFFACD', 'LemonChiffon', '柠檬绸']],
['#EEE8AA PaleGoldenrod 灰菊黄/苍麒麟色', ['#EEE8AA', 'PaleGoldenrod', '灰菊黄/苍麒麟色']],
['#F0E68C Khaki 黄褐色/卡叽布', ['#F0E68C', 'Khaki', '黄褐色/卡叽布']],
['#FFD700 Gold 金色', ['#FFD700', 'Gold', '金色']],
['#FFF8DC Cornsilk 玉米丝色', ['#FFF8DC', 'Cornsilk', '玉米丝色']],
['#DAA520 Goldenrod 金菊黄', ['#DAA520', 'Goldenrod', '金菊黄']],
['#B8860B DarkGoldenrod 暗金菊黄', ['#B8860B', 'DarkGoldenrod', '暗金菊黄']],
['#FFFAF0 FloralWhite 花的白色', ['#FFFAF0', 'FloralWhite', '花的白色']],
['#FDF5E6 OldLace 老花色/旧蕾丝', ['#FDF5E6', 'OldLace', '老花色/旧蕾丝']],
['#F5DEB3 Wheat 浅黄色/小麦色', ['#F5DEB3', 'Wheat', '浅黄色/小麦色']],
['#FFE4B5 Moccasin 鹿皮色/鹿皮靴', ['#FFE4B5', 'Moccasin', '鹿皮色/鹿皮靴']],
['#FFA500 Orange 橙色', ['#FFA500', 'Orange', '橙色']],
['#FFEFD5 PapayaWhip 番木色/番木瓜', ['#FFEFD5', 'PapayaWhip', '番木色/番木瓜']],
['#FFEBCD BlanchedAlmond 白杏色', ['#FFEBCD', 'BlanchedAlmond', '白杏色']],
['#FFDEAD NavajoWhite 纳瓦白/土著白', ['#FFDEAD', 'NavajoWhite', '纳瓦白/土著白']],
['#FAEBD7 AntiqueWhite 古董白', ['#FAEBD7', 'AntiqueWhite', '古董白']],
['#D2B48C Tan 茶色', ['#D2B48C', 'Tan', '茶色']],
['#DEB887 BurlyWood 硬木色', ['#DEB887', 'BurlyWood', '硬木色']],
['#FFE4C4 Bisque 陶坯黄', ['#FFE4C4', 'Bisque', '陶坯黄']],
['#FF8C00 DarkOrange 深橙色', ['#FF8C00', 'DarkOrange', '深橙色']],
['#FAF0E6 Linen 亚麻布', ['#FAF0E6', 'Linen', '亚麻布']],
['#CD853F Peru 秘鲁色', ['#CD853F', 'Peru', '秘鲁色']],
['#FFDAB9 PeachPuff 桃肉色', ['#FFDAB9', 'PeachPuff', '桃肉色']],
['#F4A460 SandyBrown 沙棕色', ['#F4A460', 'SandyBrown', '沙棕色']],
['#D2691E Chocolate 巧克力色', ['#D2691E', 'Chocolate', '巧克力色']],
['#8B4513 SaddleBrown 重褐色/马鞍棕色', ['#8B4513', 'SaddleBrown', '重褐色/马鞍棕色']],
['#FFF5EE Seashell 海贝壳', ['#FFF5EE', 'Seashell', '海贝壳']],
['#A0522D Sienna 黄土赭色', ['#A0522D', 'Sienna', '黄土赭色']],
['#FFA07A LightSalmon 浅鲑鱼肉色', ['#FFA07A', 'LightSalmon', '浅鲑鱼肉色']],
['#FF7F50 Coral 珊瑚', ['#FF7F50', 'Coral', '珊瑚']],
['#FF4500 OrangeRed 橙红色', ['#FF4500', 'OrangeRed', '橙红色']],
['#E9967A DarkSalmon 深鲜肉/鲑鱼色', ['#E9967A', 'DarkSalmon', '深鲜肉/鲑鱼色']],
['#FF6347 Tomato 番茄红', ['#FF6347', 'Tomato', '番茄红']],
['#FFE4E1 MistyRose 浅玫瑰色/薄雾玫瑰', ['#FFE4E1', 'MistyRose', '浅玫瑰色/薄雾玫瑰']],
['#FA8072 Salmon 鲜肉/鲑鱼色', ['#FA8072', 'Salmon', '鲜肉/鲑鱼色']],
['#FFFAFA Snow 雪白色', ['#FFFAFA', 'Snow', '雪白色']],
['#F08080 LightCoral 淡珊瑚色', ['#F08080', 'LightCoral', '淡珊瑚色']],
['#BC8F8F RosyBrown 玫瑰棕色', ['#BC8F8F', 'RosyBrown', '玫瑰棕色']],
['#CD5C5C IndianRed 印度红', ['#CD5C5C', 'IndianRed', '印度红']],
['#FF0000 Red 纯红', ['#FF0000', 'Red', '纯红']],
['#A52A2A Brown 棕色', ['#A52A2A', 'Brown', '棕色']],
['#B22222 FireBrick 火砖色/耐火砖', ['#B22222', 'FireBrick', '火砖色/耐火砖']],
['#8B0000 DarkRed 深红色', ['#8B0000', 'DarkRed', '深红色']],
['#800000 Maroon 栗色', ['#800000', 'Maroon', '栗色']],
['#FFFFFF White 纯白', ['#FFFFFF', 'White', '纯白']],
['#F5F5F5 WhiteSmoke 白烟', ['#F5F5F5', 'WhiteSmoke', '白烟']],
['#DCDCDC Gainsboro 淡灰色', ['#DCDCDC', 'Gainsboro', '淡灰色']],
['#D3D3D3 LightGrey 浅灰色', ['#D3D3D3', 'LightGrey', '浅灰色']],
['#C0C0C0 Silver 银灰色', ['#C0C0C0', 'Silver', '银灰色']],
['#A9A9A9 DarkGray 深灰色', ['#A9A9A9', 'DarkGray', '深灰色']],
['#808080 Gray 灰色', ['#808080', 'Gray', '灰色']],
['#696969 DimGray 暗淡灰', ['#696969', 'DimGray', '暗淡灰']],
['#000000 Black 纯黑', ['#000000', 'Black', '纯黑']]]
关于主题样式设置在下面ttk介绍中有更详细的用法介绍。
from tkinter.ttk import *
该代码导致几个tkinter.ttk小部件(Button, Checkbutton,Entry,Frame,Label, LabelFrame,Menubutton,PanedWindow, Radiobutton,Scale和Scrollbar)自动替换Tk小部件。
因为Ttk小部件不再存在诸如:“fg”,"bg"等小部件以及其它相关的小部件样式,所以我们只能使用ttk.Style类来改进样式效果。
Ttk附带17个小部件,其中11个已经存在于tkinter: Button,Checkbutton,Entry,Frame, Label,LabelFrame,Menubutton,PanedWindow, Radiobutton,Scale和Scrollbar。其他六个是新的:Combobox,Notebook,Progressbar, Separator,Sizegrip和Treeview。而且它们都是Widget的子类。
Tk代码:
l1 = tkinter.Label(text="Test", fg="black", bg="white")
l2 = tkinter.Label(text="Test", fg="black", bg="white")
Ttk代码:
style = ttk.Style()
style.configure("BW.TLabel", foreground="black", background="white")
l1 = ttk.Label(text="Test", style="BW.TLabel")
l2 = ttk.Label(text="Test", style="BW.TLabel")
ttk.Widget定义了Tk主题小部件支持的标准选项和方法,不应该直接实例化。
选项 | 描述 |
---|---|
class | [类] 指定窗口类。在查询选项数据库中窗口的其他选项时,使用该类,确定窗口的默认绑定标签,以及选择窗口小部件的默认布局和样式。此选项是只读的,只能在创建窗口时指定。 |
cursor | [光标] 指定要用于窗口小部件的鼠标光标。如果设置为空字符串(默认值),则为父窗口小部件继承游标。 |
takefocus | 确定窗口是否在键盘遍历期间接受焦点。返回0,1或空字符串。如果返回0,则表示在键盘遍历期间应完全跳过该窗口。如果为1,则表示只要可以查看窗口就应该接收输入焦点。空字符串表示遍历脚本决定是否关注窗口。 |
style | [样式] 可用于指定自定义窗口小部件样式 。 |
由滚动条控制的窗口小部件支持以下选项。
选项 | 描述 |
---|---|
xscrollcommand | 用于与水平滚动条进行通信。当窗口小部件窗口中的视图发生更改时,窗口小部件将基于scroll命令生成Tcl命令。通常,此选项包含某些滚动条的Scrollbar.set()方法 。这将导致只要窗口中的视图发生更改,就会更新滚动条。 |
yscrollcommand | 用于与垂直滚动条进行通信。有关更多信息,请参见上文。 |
选项 | 描述 |
---|---|
text | [文本] 指定要在窗口小部件中显示的文本字符串。 |
textvariable | 指定将使用其值代替文本选项资源的名称。 |
underline | [下划线] 如果设置,则指定要在文本字符串中加下划线的字符的索引(从0开始)。下划线字符用于助记符激活。 |
image | [图片] 指定要显示的图像。这是一个或多个元素的列表。第一个元素是默认图像名称。列表的其余部分,如果由Style.map()定义的一系列statepec / value对,指定在窗口小部件处于特定状态或状态组合时要使用的不同图像。列表中的所有图像应具有相同的大小。 |
compound | [复合]指定在存在文本和图像选项的情况下如何显示相对于文本的图像。有效值为: text:仅显示文字 image:仅显示图像 top, bottom, left, right: :分别显示文本上方,下方,左侧或右侧的图像。none:默认值。显示图像(如果存在),否则显示文本。 |
width | [宽度]如果大于零,则指定为文本标签分配多少空格(字符宽度),如果小于零,则指定最小宽度。 |
state 可以设置为“正常”或“禁用”以控制“禁用”状态位。这是一个只写选项:设置它会更改窗口小部件状态,但Widget.state()方法不会影响此选项。
state
设置按钮组件状态,可选的有NORMAL(普通)、ACTIVE(活跃)、 DISABLED(禁用)。默认 NORMAL。
小部件可设置state
flag | 描述 |
---|---|
active | 鼠标光标位于窗口小部件上,按下鼠标按钮将导致某些操作发生 |
disabled | 在程序控制下禁用小组件 |
focus | 小工具有键盘焦点 |
pressed | 小工具被按下了 |
selected | “On”,“true”或“current”类似于Checkbuttons和radiobutton的设置一样 |
background | Windows和Mac具有“活动”或前景窗口的概念。该背景状态设置为背景的窗口小部件,并清除了那些在前台窗口 |
readonly | 小部件不应允许用户修改 |
alternate | 特定于小部件的备用显示格式 |
invalid | 小部件值无效 |
除了下面描述的方法之外,ttk.Widget还支持方法tkinter.Widget.cget()和tkinter.Widget.configure()。
statespec通常是列表或元组。
class tkinter.ttk.Widget
identify(x, y)
返回位置x y处元素的名称,如果该点不位于任何元素内,则返回空字符串。
x和y是相对于小部件的像素坐标。
instate(statespec, callback=None, *args, **kw)
测试小部件的状态。如果没有指定一个回调,返回真如果控件状态匹配statespec和假否则。
如果指定了回调,那么如果widget状态与statespec匹配,则使用args调用它 。
state(statespec=None)
修改或查询小部件状态。如果指定了statespec,则根据它设置窗口小部件状态并返回指示哪些标志
已更改的新状态规范。如果未指定statespec,则返回当前启用的状态标志。
该ttk.Combobox控件结合了文本字段值的弹出的下拉列表。此小部件是Entry的子类。
除了从Widget继承的方法:Widget.cget(), Widget.configure(),Widget.identify(),Widget.instate() 和Widget.state(),以及继承自Entry: Entry.bbox()的以下方法,Entry.delete(),Entry.icursor(), Entry.index(),Entry.inset(),Entry.selection(), Entry.xview(),它有一些其他方法,在ttk.Combobox中描述 。
此小部件接受以下特定选项:
选项 | 描述 |
---|---|
exportselection | 布尔值。如果设置,则窗口小部件选择链接到窗口管理器选择(例如,可以通过调用Misc.selection_get返回)。 |
justify | 指定文本在窗口小部件中的对齐方式。“left”,“center”或“right”之一。 |
height | 以行为单位指定弹出列表框的高度。 |
postcommand | 在显示值之前立即调用的脚本(可能已在Misc.register中注册)。它可以指定要显示的值。 |
state | "normal”,“readnoly”或“disabled”之一。在“readonly”状态下,可能无法直接编辑该值,并且用户只能从下拉列表中选择值。在“normal”状态下,文本字段可直接编辑。在“disabled”状态下,不可能进行交互。 |
textvariable | 指定其值链接到窗口小部件值的名称。只要与该名称关联的值发生更改,窗口小部件值就会更新,反之亦然。请参阅tkinter.StringVar。 |
values | 指定要在下拉列表框中显示的值列表 |
width | 指定一个整数值,指示输入窗口的所需宽度,以小部件字体的平均大小字符表示。 |
当用户从值中选择元素时,组合框小部件生成<>虚拟事件
大部分可设置字体组件的都有个font参数
可直接在字体处如下写法
from tkinter import *
from tkinter.ttk import *
root = Tk()
root.geometry("200x100")
label = Label(root, text="测试字体", font=("宋体", 22, "bold", "italic", "underline", "overstrike"))
label.pack(fill="both", expand=1)
root.mainloop()
# 改变组件的显示字体
# 在Windows上测试字体显示,注意字体中包含有空格的字体名称必须指定为tuple类型。
from tkinter import *
root = Tk()
# 创建一个Label
for ft in ('Arial',
('Courier New',),
('Comic Sans MS',),
'Fixdsys',
('MS Sans Serif',),
('MS Serif',),
'Symbol',
'System',
('Times New Roman',),
'Verdana'):
Label(root, text='hello sticky', font=ft).grid()
root.mainloop()
通过导入font模块设置import tkinter.font
tkinter.font.Font def __init__(self,
root: Misc | None = ...,
font: str | Font | list | Tuple[Any, ...] | Tcl_Obj | None = ...,
name: str | None = ...,
exists: bool = ...,
*,
family: str = ...,
size: int = ...,
weight: Literal["normal", "bold"] = ...,
slant: Literal["roman", "italic"] = ...,
underline: bool = ...,
overstrike: bool = ...) -> None
family
:字体名,“黑体”, “宋体”, “楷体”, "微软雅黑"等, “幼圆” 系统特定字体’ansi’, ‘ansifixed’, ‘device’, ‘oemfixed’, ‘system’, ‘systemfixed’size
:字号weight
:加粗,可选"normal"/“bold”(加粗),默认"normal"slant
:斜体,可选"roman",/“italic”(斜体),默认romanunderline
:下划线,布尔值overstrike
:删除线,布尔值# 使用系统已有的字体,使用tkFont.Font来创建字体。
from tkinter import *
# 引入字体模块
from tkinter.font import Font, BOLD, ITALIC
root = Tk()
# 创建一个Label
# 指定字体名称、大小、样式
for ft_family in ["黑体", "宋体", "楷体", "微软雅黑", "幼圆"]:# 系统特定字体'ansi', 'ansifixed', 'device', 'oemfixed', 'system', 'systemfixed'
ft = Font(family=ft_family, # 字体如黑体、宋体、楷体、微软雅黑
size=20, # 字号
weight=BOLD, # 字体加粗Literal["normal", "bold"]
# slant=ITALIC, # 斜体Literal["roman", "italic"]
# underline=True, # 下划线
# overstrike=True # 删除线
)
Label(root, text=ft_family, font=ft).pack()
root.mainloop()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。