前言
如果有些参数不理解,可以先看看第一篇Tkinter 1. 基本介绍(尽量先看这篇,以免下面很多参数看不懂。)
(不知道怎么在简书实现页内跳转目录,百度了半天也没有结果,知道的,可以在评论区写出来,我修改一下,内容太多,没有目录跳转,看着会很难受!谢谢!)
目录:
- Button 按钮
- Checkbutton 多选按钮
- Radiobutton 单选按钮
- Entry 输入框
- Spinbox 限制范围的输入框
- Text 文本框
- Label 标签
- Listbox 列表框
- Combobox 下来列表框(ttk)
- Frame 框架
- Labelframe 可以添加标签的框架
- Panedwindow 窗格窗口,就是把窗口分区
- Separator 分割线(ttk)
- Notebook 标签页(ttk)
- Scale 滑块
- Scrollbar 滚动条
- Progressbar 进度条(ttk)
- Menu 菜单
- sizegrip 窗口大小拖动块(ttk)
- Treeview 树状结构查看器(ttk)
- Canvas 画布
Button 按钮
参数
之前未提参数说明
参数 | 说明 |
---|---|
repeatdelay | 重复延迟 |
repeatinterval | 重复间隔 |
command | 添加调用多函数,当点击按钮调用该函数 |
default | 指定按钮默认的状态:normal , active , or disabled . |
overrelief | 跟relief的设置一样,只不过这个是当鼠标移到按钮上才显示样式 |
实例
import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('test app')
mystr = tk.StringVar()
tk.Label(root,
textvariable=mystr,
width=20,
height=3,
bg='#e33e31').pack()
tag = False
def show():
global tag
if tag == False:
mystr.set('you click!')
tag = True
else:
mystr.set('')
tag = False
btn = tk.Button(root,
bd=15,
text='Click',
width=10,
font=('"Microsoft Yahei',20,'bold'),
relief='sunken',
bg='#575757',
fg='white',
command=show).pack()
root.mainloop()
Checkbutton 多选按钮
参数
之前未提参数说明
参数 | 说明 |
---|---|
indicatoron | 选择方法:如果是True就是☑️的选择方法,如果是False,就是按钮的选择方法,而且relief是:sunken |
onvalue / offvalue | 勾选选项 和取消勾选时输出的值 |
实例
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
frm = tk.LabelFrame(root,
text='喜欢的编程语言',
padx=10,
pady=10)
frm.pack()
var_p = tk.IntVar()
var_j = tk.IntVar()
def check():
if (var_p.get() == 1) & ( var_j.get() == 1) :
tkinter.messagebox.showinfo(message='我喜欢python,也喜欢Java')
elif (var_p.get() == 1) & (var_j.get() == 0) :
tkinter.messagebox.showinfo(message='我只喜欢python')
elif (var_p.get() == 0) & (var_j.get() == 1) :
tkinter.messagebox.showinfo(message='我只喜欢Java')
else:
tkinter.messagebox.showinfo(message='我两个都不喜欢')
btn1 = tk.Checkbutton(frm,text='Python',variable=var_p,onvalue=1,offvalue=0,command=check)
btn2 = tk.Checkbutton(frm,text='Java',variable=var_j,onvalue=1,offvalue=0,command=check)
btn1.grid(row=0,column=0)
btn2.grid(row=0,column=1)
root.mainloop()
Radiobutton 单选按钮
参数
之前未提参数说明
参数 | 说明 |
---|---|
indicatoron | 选择方法:如果是True就是☑️的选择方法,如果是False,就是按钮的选择方法,而且relief是:sunken |
实例
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
frm = tk.LabelFrame(root,
text='性别',
padx=10,
pady=10)
frm.pack()
var_r = tk.IntVar()
def radio():
if var_r.get() == 1:
tkinter.messagebox.showinfo(message='你是男的')
else:
tkinter.messagebox.showinfo(message="你是女的")
rdo = tk.Radiobutton(frm,text='男',variable=var_r,value=1,command=radio)
rdo2 = tk.Radiobutton(frm,text='女',variable=var_r,value=0,command=radio)
rdo.grid(row=0,column=0)
rdo2.grid(row=1,column=0)
root.mainloop()
Entry 输入框
参数
之前未提参数说明
参数 | 说明 |
---|---|
validate | 发生某些动作 |
validatecommand or vcmd | 发生某些动作时,触发该函数 |
show | 适用于输入密码的输入框,当show="*"时,输入密码的时候,不会显示实际内容,只显示*
|
validate
当输入框获得焦点或者失去焦点等,触发
validatecommand
上的函数,下面的英语特别简单就不翻了。
输入框中输入内容的索引
- 直接用数字表示,0表示第一个字符、1表示第二个字符,以此类推
- 'end' 表示输入内容的最后一个字符
- ‘insert' 指示与插入光标相邻并紧随其后的字符
常用的函数
- delete(first, last) 从first删到last (删除内容)
- insert(index, string) 在索引指示的字符之前插入字符串的字符 (添加内容)
- get() 获取输入框的内容 (获取内容)
实例
import tkinter as tk
import tkinter.messagebox
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('600x400')
self.set_widget()
self.bind_event()
self.mainloop()
def set_widget(self):
self.frm = tk.Frame(self,pady=40)
self.frm.pack()
tk.Label(self.frm,text='账号').grid(row=0,column=0,pady=10,padx=10)
tk.Label(self.frm,text='密码').grid(row=1,column=0,pady=10)
self.name = tk.StringVar()
self.name.set('请输入邮箱或者手机号')
self.ety_name = tk.Entry(self.frm,
width=25,
textvariable=self.name,
font=("Microsoft Yahei",8,'italic'),
fg='gray')
self.ety_name.grid(row=0,column=1,columnspan=3)
self.ety_pwd = tk.Entry(self.frm,
show='*',
width=25,
font=("Microsoft Yahei",8))
self.ety_pwd.grid(row=1,column=1,columnspan=3)
self.btn_write = tk.Button(self.frm,text='写入',width=5,command=self.write)
self.btn_write.grid(row=2,column=3)
self.btn_clear = tk.Button(self.frm,text='删除',width=5,command=self.clear)
self.btn_clear.grid(row=2,column=1)
self.mystr = tk.StringVar()
self.ety_show = tk.Entry(self,textvariable=self.mystr,bg='red')
self.ety_show.pack()
def bind_event(self):
""" 绑定事件"""
self.ety_name.bind('<FocusIn>',self.clear_tip)
self.ety_name.bind('<FocusOut>',self.add_tip)
def clear_tip(self,event):
self.name.set('')
self.ety_name.config(font=("Microsoft Yahei",8),fg='black')
def add_tip(self,event):
if self.ety_name.get() == '' :
self.name.set('请输入邮箱或者手机号')
self.ety_name.config(font=("Microsoft Yahei",8,'italic'),fg='gray')
tkinter.messagebox.showerror(title='警告',message='账号不能为空!')
def write(self):
data = self.ety_name.get()
self.ety_show.delete(0,'end') # 先清空避免里面有数据
self.ety_show.insert('end',data)
def clear(self):
self.ety_show.delete(0,'end') # 从第一个字符删到最后一个字符
App()
Spinbox 限制范围的输入框
Spinbox 是用来选择一个数值范围内的数字的输入组件
参数
之前未提参数说明
属性 | 说明 |
---|---|
from_ | 设置数值范围的最小值 |
to | 设置数值范围的最大值 |
command | 当点击了Spinbox的滑块时触发函数,手动输入值不会触发 |
format | 设置数字格式,比如'%.2f' 代表小数点后保留两位小数 |
values | 用from to 只能设置数值,用这个方法就可以选择字符串,如:values=('nan','nv') |
validate\validatecommand | 同上 |
实例
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
def show():
data = sbox.get()
tkinter.messagebox.showinfo(message=f'you select {data}')
sbox = tk.Spinbox(root,bg='red',from_=0,to=10,command=show,format='%.2f',justify='center')
sbox.pack()
root.mainloop()
Text 文本框
参数
之前未提参数说明
属性 | 说明 |
---|---|
setgrid | 确定此小部件是否控制其顶级窗口的调整大小网格 |
spacing1 | 在一段没有手动换行的段落前设置行距(当写的内容超过文本框边界而换行的没问题) |
spacing2 | 在一段没有手动换行的段落之间的每一行设置行距 |
spacing3 | 在一段没有手动换行的段落后设置行距 |
tabs | tab键的距离 |
undo | 是否有撤销功能,默认True,有撤销功能 |
autoseparators | 是否在撤消堆栈中自动插入分隔符 |
Text控件中关于index索引
索引 | 说明 |
---|---|
'insert' | 光标所在的位置 |
'current' | 与鼠标最近的位置 |
'end' | 文本区域最后一个字符的下一个位置 |
'line.char' | 某一行的某一个字符,行从1开始,字符从0开始,比如‘1.0’表示第一行的第一个字符 |
"line.end" | 表示某一行到末尾的最后一个位置 |
tag.first tag.last | 标签tag的第一个字符,和最后一个字符 |
mark | 表示紧跟在名称为mark 的标记之后的字符 |
当有选中文本时,还可以使用以下这种索引:
Text对象的get()方法可以取得目前所选的文字,在使用Text文字区域时,如果有选取文字操作发生时,Text的对象会将所选文字的起始索引放在SEL_FIRST,结束索引放在SEL_LAST,将SEL_FIRST和
SEL_LAST当做get方法的参数,就可以获得目前所选的文字了
函数
函数 | 功能说明 |
---|---|
bbox(index) | 返回值是一个 4 元组:(x, y, width, height) |
compare(index1, op, index2) | 返回对比 index1 和 index2 指定的两个字符的结果,op—’<’, ‘<=’, ‘==’, ‘>=’, ‘>’ 或 ‘!=’ |
delete(index1, index2=None) | 删除给定范围的文本或嵌入对象 |
dlineinfo(index) | 返回给定索引指定的字符所在行的边界框,返回值是一个 5 元组:(x, y, width, height, offset),offset 表示从该行的顶端到基线的偏移 |
dump(index1, index2=None, command=None, **kw) | 返回 index1 和 index2 之间的内容 返回的值是一个由 3 元组(关键词,值,索引)组成的列表,关键词参数的顺序为:all, image, mark, tag, text, window ,如果需要筛选个别关键词,可以用 dump(index1, index2, image=True, text=True) 这样的形式调用;如果指定了 command 函数,那么会为列表中的每一个三元组作为参数调用一次该函数(这种情况下,dump() 不返回值 |
edit_modified(arg=None) | 查询和设置 modified 标志 |
edit_redo() | 恢复”上一次的“撤销”操作 |
edit_reset() | 清空存放操作记录的栈 |
edit_separator() | 插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作 |
edit_undo() | 撤销最近一次操作 |
get(index1, index2=None) | 返回 index1 到 index2(不包含)之间的文本 |
index(index) | 将 index 参数指定的位置以 “line.column” 的索引形式返回 |
insert(index, chars, *args) | 在 index 参数指定的位置插入字符串,参数 tags 用于指定文本的样式 |
peer_create(self, newPathName, cnf={}, **kw) | 用给定的newPathName创建一个同级的文本工具和任何可选的标准配置选项,默认统计文本工具和它的父级工具一样有着相同的起始线和终止线。但是这些可以被标准配置参数重写 |
peer_names() | 返回这个工具的同级工具的列表,不包括这个工具本身 |
replace(index1, index2, chars, *args) | 将 index1 到 index2 之间的内容替换为 chars 参数指定的字符串,如果需要为替换的内容添加 Tag,可以在 args 参数指定 Tag |
search(pattern, index, stopindex=None,forwards=None, backwards=None, exact=None,regexp=None, nocase=None, count=None, elide=None) | 太长写在下面 |
see(index) | 滚动内容,确保 index 指定的位置可见 |
search
- 从 index 开始搜索 pattern,到 stopindex 结束(不指定表示搜索到末尾)
- 如果成功找到,以 “line.column” 返回第一个匹配的字符;否则返回空字符串
- forwards 参数设置为 True 表示向前(->)搜索
- backwards 参数设置为 True 表示向后(<-)搜索
- exact 参数设置为 True 表示搜索与 pattern 完全匹配的结果
- regexp 参数设置为 True,则 pattern 被解释为 Tcl 格式的正则表达式
- nocase 参数设置为 True 是忽略大小写,默认是区分大小写的搜索
- count 参数指定为一个 IntVar 的 Tkinter 变量,用于存放当找到匹配的字符个数(如果匹配结果中没有嵌入的 image 或 window 对象的话,一般该值等于 pattern 的字符个数)
Tags
1. Tags可以设置的属性
- background color——背景色
- bgstipple bitmap——背景位图
- borderwidth pixels——边框宽度
- elide boolean——指定是否应该删除数据。已删除的数据(字符、图像、嵌入的窗口等)不显示并且在屏幕上不占用空间,但进一步的行为与普通数据一样
- fgstipple bitmap——前景位图
- font fontName——字体
- foreground color——前景色
- justify justify——对齐方式 left, right, or center.
- lmargin1 pixels——第一行左边边距
- lmargin2 pixels——当一行内容过多而换行,换行的那些行的左边边距
- lmargincolor color
- offset pixels——指定文本基线应垂直偏移整行基线的量
- overstrike boolean——删除线
- overstrikefg color——删除线颜色
- relief relief
- rmargin pixels——右边距
- rmargincolor color——右边距颜色
- selectbackground color
- selectforeground color
- spacing1 pixels
- spacing2 pixels
- spacing3 pixels
- tabs tabList
- tabstyle style
- underline boolean——是否设置下划线
- underlinefg color——指定显示下划线时使用的颜色
- wrap mode —— none, char, or word
2. Tags方面的函数
tag_add(tagName, index1, index2...)
- 为 index1 到 index2 之间的内容添加一个 Tag(tagName 参数指定)
- 如果 index2 参数忽略,则单独为 index1 指定的内容添加 Tag
tag_bind(tagName, sequence, func, add=None)
- 给tag绑定事件(sequence)
- 如 Enter, Leave, ButtonPress, Motion, and KeyPress 等事件
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
tx = tk.Text(root)
tx.pack()
tx.tag_config('tg1',background='red',foreground='white',underline=True)
tx.insert('end','xxxxxxxxxx','tg1')
def show(event):
tkinter.messagebox.showinfo(message='hello')
tx.tag_bind('tg1','<Enter>',show)
root.mainloop()
tag_unbind(tagName, sequence, funcid=None)
- 解绑
tag_cget(tagName, option)
- 返回 tagName 指定的 option 选项的值
tag_config( tagName, cnf=None, **kw)
- 配置一些属性:背景颜色,前景色,字体等等,可设置的属性在上面有提到
- 和tag_configure 一样
tag_delete(tagNames)
- 删除tags
tag_lower(tagName, belowThis=None)
- 降低 Tag 的优先级
- 如果 belowThis 参数不为空,则表示 tagName 需要比 belowThis 指定的 Tag 优先级更低
tag_raise(tagName, aboveThis=None)
- 提升Tag的优先级
- 如果 aboveThis 参数不为空,则表示 tagName 需要比 aboveThis 指定的 Tag 优先级更高
tag_names(index=None)
- 返回所有标签名称的列表
tag_nextrange(tagName, index1, index2=None)
- 在 index1 到 index2 的范围内第一个 tagName 的位置
- 如果没有则返回空字符串
tag_prevrange(tagName, index1, index2=None)
- ag_nextrange() 的反向查找,也就是查找范围是 index2 到 index1
tag_ranges(tagName)
- 返回所有 tagName 指定的文本,并将它们的范围以列表的形式返回
tag_remove(tagName, index1, index2=None)
- 删除 index1 到 index2 之间所有的 tagName
- 如果忽略 index2 参数,那么只删除 index1 指定的那个字符的 tagName
Text控件中插入其他组件
window_cget(index, option)
- 返回 index 参数指定的嵌入 window 对象的 option 选项的值
- 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常
window_config(index, cnf=None, **kw)
- 修改 index 参数指定的嵌入 window 对象的一个或多个 option 选项的值
- 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常
window_create(index, cnf={}, **kw)
- align ——对齐方式: TOP、CENTER、BOTTOM 或 BASELINE
- create——指定一个回调函数用于创建嵌入的 window 组件,该函数没有参数,并且必须创建 Text 的子组件并返回。
- padx
- pady
- stretch——该选项控制当行的高度大于嵌入组件的高度时,嵌入组件是否延伸。默认值是 False,表示组件保持原形;设置为 True 表示将该组件垂直部分延伸至行的高度
- window ——插入的控件
import tkinter as tk
root = tk.Tk()
root.geometry('600x400')
tx = tk.Text(root)
tx.pack()
btn = tk.Button(tx,text='Click')
tx.window_create('end',window=btn)
root.mainloop()
window_names()
- 返回 Text 组件中嵌入的所有 window 对象的名字
Text控件中插入图片
image_cget(index, option)
- 返回 index 参数指定的嵌入 image 对象的 option 选项的值
- 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常
image_configure(index, cnf=None, **kw)
- 修改 index 参数指定的嵌入 image 对象的一个或多个 option 选项的值
- 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常
image_create( index, cnf={}, **kw)
- align——设定此图像的垂直对齐,可以是 TOP、CENTER、BOTTOM 或 BASELINE
- image—— image 对象必须是 Tkinter 的 PhotoImage 或 BitmapImage 实例
- name——你可以为该图像实例命名
- padx
- pady
image_names()
- 返回 Text 组件中嵌入的所有 image 对象的名字
Mark文本标记
Mark(标记)通常被用来当作书签,它可以帮助用户快速找到内容的指定位置,并且跟随相应的字符一起移动。
Mark 有两种类型的标记,分别是“INSERT”和“CURRENT”,其含义如下:
- INSERT:指定当前插入光标的位置,Tkinter 会在该位置绘制一个闪烁的光标;
- CURRENT:用于指定当前光标所处坐标最邻近的位置。
Mark相关的函数
方法 | 说明 |
---|---|
mark_gravity(markName, direction=None) | 设置 Mark 的移动方向,默认是 "right",也可以设置为 "left" ,表示即如果在 Mark 处插入文本的话,Mark 的标记移动方向,也就是文本的插入方向。 |
mark_names() | 返回 Text 组件中所有 Marks 的名字 |
mark_next(index) | 返回在 index 指定的位置后边的一个 Mark 的名字 |
mark_previous(index) | 返回在 index 指定的位置前边的一个 Mark 的名字 |
mark_set(markName, index) | 移动 Mark 到 index 参数指定的位置,如果 markName 参数指定的 Mark 不存在,则创建一个新的 Mark |
mark_unset(*markNames) | 删除指定的 Mark |
实例
import tkinter as tk
import tkinter.messagebox
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('600x500')
self.set_widget()
self.mainloop()
def set_widget(self):
self.text = tk.Text(self)
self.text.pack()
self.frm = tk.Frame(self)
self.frm.pack()
tk.Label(self.frm,text='标记名称').grid(row=0,column=0)
tk.Label(self.frm,text='插入内容').grid(row=1,column=0)
self.ety_mark = tk.Entry(self.frm)
self.ety = tk.Entry(self.frm)
self.ety_mark.grid(row=0,column=1,columnspan=2)
self.ety.grid(row=1,column=1,columnspan=2)
self.btn_add = tk.Button(self.frm,text='添加标记',command=self.add_mark)
self.btn_delete = tk.Button(self.frm,text='删除标记',command=self.delete_mark)
self.btn_add.grid(row=2,column=1)
self.btn_delete.grid(row=2,column=2)
self.btn_show = tk.Button(self.frm,text='显示标记',command=self.show_mark)
self.btn_write = tk.Button(self.frm,text='插入内容',command=self.write)
self.btn_show.grid(row=3,column=1)
self.btn_write.grid(row=3,column=2)
def add_mark(self):
"""添加标记"""
mark = self.ety_mark.get()
if mark == '':
tkinter.messagebox.showerror(message='请输入标记的名称')
return
else:
self.text.mark_set(mark,'insert')
def delete_mark(self):
"""删除标记"""
mark = self.ety_mark.get()
if mark == '':
tkinter.messagebox.showerror(message='请输入标记的名称')
return
else:
self.text.mark_unset(mark)
def show_mark(self):
"""显示标记"""
mark = self.ety_mark.get()
if mark == '':
tkinter.messagebox.showerror(message='请输入标记的名称')
return
else:
try:
self.text.see(mark)
except tk.TclError:
tkinter.messagebox.showerror(message=f'{mark}该标记不存在')
def write(self):
"""往标记的位置写入内容"""
mark = self.ety_mark.get()
contents = self.ety.get()
if (mark != '') & (contents != ''):
self.text.insert(mark,contents)
else:
tkinter.messagebox.showerror(message='标记名称和插入内容不能有空白!')
App()
Label 标签
参数
实例
import tkinter as tk
import sys
import os
ui_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
ico_path = os.path.join(ui_dir,'ico/logox16.ico')
root = tk.Tk()
root.geometry('600x300+100+100')
root.configure(bg='#1BA135')
lab = tk.Label(text='账号',
relief='sunken',
width=10,
bg='#14B5F1',
fg='#FA536C',
bitmap=ico_path).grid(row=0,column=0)
lab2 = tk.Label(text='密码',
relief='sunken',
width=10,
bg='#14B5F1',
fg='#FA536C').grid(row=1,column=0)
root.title('test app') # 设置窗口的标题
root.mainloop()
Listbox 列表框
参数
之前未提参数说明
参数 | 说明 |
---|---|
activestyle | 指定绘制活动元素的样式: dotbox none underline
|
selectmode | 指定用于操作选择的几种样式之一: single (单选),browse (默认,也是单选,但拖动鼠标或通过方向键可以直接改变选项),multiple (多选),extended (也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现) |
函数
函数 | 说明 |
---|---|
activate(index) | 将给定索引号对应的选项激活,即文本下方画一条下划线 |
bbox(index) | 返回给定索引号对应的选项的边框,返回值是一个以像素为单位的 4 元祖表示边框:(xoffset, yoffset, width, height), xoffset 和 yoffset 表示距离左上角的偏移位置 |
curselection() | 返回一个元组,包含被选中的选项序号(从 0 开始) |
delete(first, last=None) | 删除参数 first 到 last 范围内(包含 first 和 last)的所有选项 |
get(first, last=None) | 返回一个元组,包含参数 first 到 last 范围内(包含 first 和 last)的所有选项的文本 |
index(index) | 返回与 index 参数相应选项的序号 |
itemcget(index, option) | 获得 index 参数指定的项目对应的选项(由 option 参数指定) |
itemconfig(index, **options) | 设置 index 参数指定的项目对应的选项(由可变参数 **option 指定) |
nearest(y) | 返回与给定参数 y 在垂直坐标上最接近的项目的序号 |
selection_set(first, last=None) | 设置参数 first 到 last 范围内(包含 first 和 last)选项为选中状态,使selection_includes(序号) 可以判断选项是否被选中。 |
size() | 返回 Listbox 组件中选项的数量 |
xview(*args) | 该方法用于在水平方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现。 如果第一个参数是 "moveto",则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端;如果第一个参数是 "scroll",则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 "units" 或 "pages"),例如:xview("scroll", 2, "pages")表示向右滚动二行。 |
yview(*args) | 该方法用于在垂直方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现 |
实例
import tkinter as tk
import tkinter.messagebox
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('600x400')
self.set_widget()
self.mainloop()
def set_widget(self):
self.frm = tk.Frame(self)
self.frm.pack()
tk.Label(self.frm,text='Item').grid(row=0,column=0)
tk.Label(self.frm,text='Like').grid(row=0,column=1)
self.items = tk.StringVar()
self.items.set(['Python','Java','C++'])
self.likes = tk.StringVar()
self.listbox_items = tk.Listbox(self.frm,listvariable=self.items)
self.listbox_items.grid(row=1,column=0)
self.listbox_items.selection_set(0) # 设置默认选中选项,index从0开始
self.listbox_likes = tk.Listbox(self.frm,listvariable=self.likes)
self.listbox_likes.grid(row=1,column=1)
self.btn_add = tk.Button(self.frm,text='Add',width=10,command=self.add_itme)
self.btn_add.grid(row=2,column=0)
self.btn_delete = tk.Button(self.frm,text='Delete',width=10,command=self.delete_itme)
self.btn_delete.grid(row=2,column=1)
def add_itme(self):
try:
item = self.listbox_items.get(self.listbox_items.curselection())
num = self.listbox_likes.size()
if num > 0 :
likes = self.listbox_likes.get(0,num-1)
if item not in likes:
self.listbox_likes.insert('end',item)
else:
tkinter.messagebox.showerror(message=f'{item}已经存在了。')
else:
self.listbox_likes.insert('end',item)
except tk.TclError:
tkinter.messagebox.showerror(message='无效选择,必须选中item列表框的项目才能新增')
def delete_itme(self):
delete_item = self.listbox_likes.curselection()
if not delete_item :
tkinter.messagebox.showerror(message='没有选择要删除的项目,只能删除like列表框中的项目')
else:
self.listbox_likes.delete(delete_item)
App()
ttk_combobox 下拉列表
参数
之前未提参数说明
参数 | 说明 |
---|---|
postcommand | 点击下拉列表后,显示内容之前,执行的命令 |
values | 指定下拉列表显示的值 |
函数
- current(newIndex) 设置默认选中的项目
- get() 获取选中的值
- set(value) 添加值
实例
import tkinter.ttk as tk2
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
contents = ['Java','Python','C++']
cbx = tk2.Combobox(root,values=contents,justify='center',width=8)
cbx.pack()
def show():
data = cbx.get()
tkinter.messagebox.showinfo(message=data)
btn = tk.Button(root,text='show',command=show)
btn.pack()
root.mainloop()
Frame 框架
参数
之前未提参数说明
参数 | 说明 |
---|---|
visual | 为新窗口指定视觉信息 |
实例
import tkinter as tk
root = tk.Tk()
root.geometry('600x400')
frm1 = tk.Frame(root,bg='red',padx=10,pady=10)
frm1.pack()
tk.Label(frm1,text='Frame1').pack()
frm2 = tk.Frame(root,bg='yellow',padx=10,pady=10)
frm2.pack()
tk.Label(frm2,text='Frame2').pack()
root.mainloop()
Labelframe 可以添加标签的框架
参数
之前未提参数说明
参数 | 说明 |
---|---|
class | 指定窗口的类,这个类会在查询选项数据库的时候用到窗口的其他选项,后面也会用到绑定等其他用途 |
labelanchor | 标签位置(n北,e东,s南,w西,还有ne, nw, se, sw等) |
labelwidget | 标签使用的组件,如果省略,框架使用Text文本组件 |
visual | 为新窗口指定视觉信息 |
实例
Panedwindow 窗格窗口
参数
之前未提参数说明
参数 | 说明 |
---|---|
orient | vertical 分成上下两部分,horizontal分成左右两部分 |
showhandle | 显示手柄 |
handlepad | 手柄到分隔线距离 |
handlesize | 手柄到大小 |
sashrelief | 分割线到样式,'sunken'等 |
sashwidth | 分割线等宽度 |
Pane 参数
参数 | 说明 |
---|---|
after | 添加新的子组件到指定子组件后边 |
before | 添加新的子组件到指定子组件前边 |
height | 高 |
minsize | 该选项控制窗格不得低于的值 |
padx | 指定子组件的水平内边距 |
pady | 指定子组件的垂直那边句 |
sticky | 指定子组件位于窗格的位置可选的值有:"e"、"s"、"w"、"n". |
width | 宽 |
函数
函数 | 说明 |
---|---|
add(child,options)) | 向窗口添加新窗格,并且设置相关属性 |
paneconfig(child, **options) | 设置子组件的各种选项 |
forget(child) | 删除指定的窗格 |
panecget(child, option) | 获得子组件指定选项的值 |
insert(pos ,child options) | 在指定位置插入窗格 |
panes() | 返回所有窗格 |
实例
import formatter
import tkinter as tk
from turtle import width
root = tk.Tk()
root.geometry('600x400')
pw1 = tk.PanedWindow(root,orient='horizontal',sashwidth=5,sashrelief='sunken')
pw1.pack(fill='both',expand=True)
frm_L = tk.Frame(pw1)
pw1.add(frm_L,padx=10,pady=10,width=150)
pw2 = tk.PanedWindow(pw1,orient='vertical',sashwidth=5,sashrelief='sunken')
pw1.add(pw2)
frm_R_T = tk.Frame(pw2)
pw2.add(frm_R_T,height=100,padx=10,pady=10)
frm_R_B = tk.Frame(pw2)
pw2.add(frm_R_B,padx=10,pady=10)
btn1 = tk.Button(frm_L,text='Left')
btn1.pack()
btn2 = tk.Button(frm_R_T,text='Right-Top')
btn2.pack()
btn3 = tk.Button(frm_R_B,text='Right-bottom')
btn3.pack()
root.mainloop()
ttk_separator 分割线
参数
实例
import tkinter as tk
import tkinter.ttk as tk2
root = tk.Tk()
root.geometry('600x400')
lbl1 = tk.Label(root,text='one')
lbl1.pack()
sp = tk2.Separator(root,orient='horizontal')
sp.pack(fill='x')
lbl2 = tk.Label(root,text='two')
lbl2.pack()
root.mainloop()
ttk_notebook 标签页
参数
之前未提参数说明
参数 | 说明 |
---|---|
sticky | 设置标签里面的组件放置的位置。n , s , e , w . |
函数
tab_id从0开始
函数 | 说明 |
---|---|
add(child, **kw) | 新建标签页. |
forget(tab_id) | 移除标签页 |
hide(tab_id) | 隐藏指定 tab_id的标签页 |
identify(x, y) | 返回位置 x, y 处的选项卡元素的名称. |
index(tab_id) | 返回由 tab_id 指定的选项卡的数字索引 或者 标签总数( 当tab_id 是 “end”的时候). |
insert(pos, child, **kw) | 在指定位置插入标签 |
select(tab_id=None) | 选中指定的标签. |
tabs() | 返回所有标签 |
实例
import tkinter as tk
import tkinter.ttk as tk2
root = tk.Tk()
root.geometry('600x400')
nt = tk2.Notebook(root,height=300,width=300)
nt.pack()
tab1 = tk.Frame(nt)
tab2 = tk.Frame(nt)
tab3 = tk.Frame(nt)
def sel():
nt.select(2)
btn = tk.Button(tab1,text='test',command=sel)
btn.pack()
nt.add(tab1,text='Python',sticky='w',padding=30)
nt.add(tab2,text='Java')
nt.add(tab3,text='C++')
root.mainloop()
Scale滑块
参数
之前未提参数说明
参数 | 说明 |
---|---|
from_ | 设置滑块的取值范围,最小值 |
to | 设置滑块的取值范围,最大值 |
troughcolor | 滑块槽里面的颜色 |
command | 当移动滑块是触发函数,并且会传入一个参数(滑块的值)给函数。 |
digits | 一个整数,指定在将刻度值转换为字符串时应保留多少个有效数字 |
label | Scale标签名 |
length | Scale的长度,单位:像素(pixels) |
orient |
horizontal or vertical 设置滑块是水平放置,还是垂直放置 |
resolution | 步长,设置每次移动多少 |
showvalue | 显示值,现在选中的值 |
sliderlength | 设置滑块的大小 |
tickinterval | 设置刻度的间隔值,并显示刻度 |
实例
Scrollbar 滚动条
参数
之前未提参数说明
参数 | 说明 |
---|---|
troughcolor | 指定用于滚动条和刻度等小部件中的矩形槽区域的颜色 |
elementborderwidth | 箭头和滑块周围边框的宽度 |
jump | 等于True时,表示直到用户释放鼠标按钮才调用命令;等于False时,滑块的每个小拖动都会导致调用命令 |
orient | 有:horizontal or vertical 可以设置 |
实例
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
contents = []
for i in range(20):
e = f'this is {i} line'
contents.append(e)
var_contents = tk.StringVar()
var_contents.set(contents)
list_box = tk.Listbox(root,listvariable=var_contents)
scorll_bar = tk.Scrollbar(root)
scorll_bar.pack(side='right',fill='y')
list_box.config(yscrollcommand=scorll_bar.set)
scorll_bar.config(command=list_box.yview)
list_box.pack()
root.mainloop()
ttk_progressbar 进度条
参数
之前未提参数说明
参数 | 说明 |
---|---|
orient | “horizontal” or “vertical”.水平放置 或者垂直放置进度条 |
length | 进度条的长度 |
mode | “determinate” (固定) or “indeterminate”(不固定) |
maximum | 最大值 |
value | 进度条的当前值。在 determinate 模式下代表已完成的工作量。在 indeterminate 模式下,解释为 maximum 的模;也就是说,当本值增至 maximum 时,进度条完成了一个“周期”。 |
phase | 只读属性。只要值大于 0 且在 determinate 模式下小于最大值,控件就会定期增大该属性值。当前主题可利用本属性提供额外的动画效果。 |
函数
函数 | 说明 |
---|---|
cget(option) | 返回指定选项的当前值 |
configure(option,value option value) | 修改或查询小部件选项 |
start(interval=None) | 开启自增模式:安排一个循环的定时器事件,每隔 interval 毫秒调用一次 |
step(amount=None) | 步长,每次递增多少,默认1 |
stop() | 停止 |
state(stateSpec) | 修改或查询小部件状态 |
实例
import time
import tkinter as tk
import tkinter.ttk as tk2
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
def func1():
""" 有固定量的,到一定量就停止 """
for i in range(1,101):
v.set(i)
root.update() # 没有这句过程的增量不会显示出来
time.sleep(0.1)
def func2():
""" 没有固定量的,一直增加,到头后重新来一次,一直循环 """
pb2.start()
btn1 = tk.Button(root,text='固定',command=func1)
btn1.grid(row=0,column=0,padx=10)
btn2 = tk.Button(root,text='非固定',command=func2)
btn2.grid(row=1,column=0)
v = tk.IntVar()
v.set(0)
pb1 = tk2.Progressbar(root,length=300,variable=v,maximum=100)
pb1.grid(row=0,column=1)
pb2 = tk2.Progressbar(root,length=300,value=0,maximum=100)
pb2.grid(row=1,column=1)
root.mainloop()
Menu 菜单
参数
属性 | 说明 |
---|---|
activebackground | 激活状态的背景色 |
activeforeground | 激活状态的前景色 |
accelerator | 指定快捷键 |
background | 背景色 |
bitmap | 位图 |
columnbreak | 分栏符 |
command | 选中后执行的回调 |
font | 字体 |
foreground | 前景色 |
hidemargin | 隐藏边缘 |
image | 图片 |
indicatoron | 指示器开启 |
label | 标签 |
menu | 菜单对象 |
offvalue | off状态下的值 |
onvalue | on状态下的值 |
selectcolor | 选中后的颜色 |
selectimage | 选中后的图片 |
state | 状态 |
underline | 下划线 |
value | 值 |
variable | 变量 |
添加菜单命令
- 添加菜单命令 menu.add_commmand()
- 添加子菜单 menu.add_cascade()
- 添加分割线 menu.add_separator()
- 添加复选菜单 menu.add_checkbutton()
- 添加单选菜单 menu.add_radiobutton()
实例
import tkinter as tk
import tkinter.messagebox
# 1. 普通菜单的设置
# 2. 二级菜单的设置
# 3. 给菜单命令添加快捷键注释,以及添加快捷键
# 4. 添加鼠标右击弹出菜单。
def show():
tkinter.messagebox.showinfo(message='you click!')
def __show(event):
# 和上面的函数功能相同,只是因为bind的时候会传入一个参数event,所以要有一个接收的参数。
show()
root = tk.Tk()
root.geometry('600x400')
## 添加菜单的流程
# 1. 新建一个菜单
# 2. 往菜单里添加命令
# 3. 往菜单栏里添加新建的菜单
menubar = tk.Menu(root)
file_menu = tk.Menu(menubar,tearoff=0)
file_menu.add_command(label='open',command=show,accelerator='Ctrl+o') # 这边的快捷键设置,只是添加一个文字而已,没有快捷键的作用。
file_menu.add_command(label='create',command=show,accelerator='Ctrl+t')
file_menu.add_separator()
var_p = tk.IntVar()
var_j = tk.IntVar()
var_r = tk.IntVar()
def check():
if (var_p.get() == 1) & ( var_j.get() == 1) :
tkinter.messagebox.showinfo(message='我喜欢python,也喜欢Java')
elif (var_p.get() == 1) & (var_j.get() == 0) :
tkinter.messagebox.showinfo(message='我只喜欢python')
elif (var_p.get() == 0) & (var_j.get() == 1) :
tkinter.messagebox.showinfo(message='我只喜欢Java')
else:
tkinter.messagebox.showinfo(message='我两个都不喜欢')
def radio():
if var_r.get() == 1:
tkinter.messagebox.showinfo(message='你是男的')
else:
tkinter.messagebox.showinfo(message="你是女的")
############ checkbutton是可以多选
file_menu.add_checkbutton(label='python',variable=var_p,onvalue=1,offvalue=0,command=check)
file_menu.add_checkbutton(label='java',variable=var_j,onvalue=1,offvalue=0,command=check)
file_menu.add_separator()
############ radiobutton是只能单选
file_menu.add_radiobutton(label='男',variable=var_r,value=1,command=radio)
file_menu.add_radiobutton(label='女',variable=var_r,value=0,command=radio)
menubar.add_cascade(label='File',menu=file_menu)
# 子菜单
sub_menu = tk.Menu(file_menu,tearoff=0)
sub_menu.add_command(label='From csv',command=show)
sub_menu.add_command(label='From PDF',command=show)
sub_menu.add_command(label='From Excel',command=show)
file_menu.add_cascade(label='Import data From',menu=sub_menu)
root.config(menu=menubar)
######## 添加快捷键
root.bind_all("<Control-o>",__show)
root.bind_all("<Control-t>",__show)
######## 鼠标右击弹出菜单
def pop_up_menu(event):
# 在鼠标点击的地方弹出菜单
pop_menu.post(event.x_root,event.y_root)
pop_menu = tk.Menu(root,tearoff=0)
pop_menu.add_command(label='eidt',command=show)
pop_menu.add_command(label='save',command=show)
root.bind("<Button-3>",pop_up_menu)
########
root.mainloop()
OptionMenu
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
mystr = tk.StringVar()
m = tk.OptionMenu(root,mystr,'Python','Java','C++')
m.pack()
def show():
tkinter.messagebox.showinfo(message=f'i like {mystr.get()}')
btn = tk.Button(root,text='show',command=show)
btn.pack()
root.mainloop()
ttk_sizegrip 窗口大小拖动块
控件允许用户通过按下并拖动控制柄来调整内部顶层窗口的大小。就是一个用来调整窗口大小的控件。
import tkinter as tk
import tkinter.ttk as tk2
root = tk.Tk()
root.geometry('600x400')
tk2.Sizegrip(root).place(x=560,y=360)
root.mainloop()
ttk_treeview 树状结构查看器
参数
Widget Options
Option | Description |
---|---|
columns | 列标识符列表,指定列数及其名称。 |
displaycolumns | 指定显示的列,#all表示显示所有 |
height | 指定可见的行数 |
selectMode | 选择模式: extended(可以多选), browse(一次只能选择一个项目), or none. |
show | 显示树的哪些元素:tree(在 #0 列显示树的文本标签),headings(显示标题),“tree headings”(显示所有元素) |
Item Options
Option | Description |
---|---|
text | tiem的标签名称 |
image | 设置图片,显示在标签的左侧 |
values | 设置item的值 |
open | True/False ,是否点开,显示还是隐藏子级 |
Widget Commands
get_children(item=None)
- 返回属于项的子级列表
set_children(item, *newchildren)
- 将项的子项替换为新子项
column(column, option=None, **kw)
- 查询或修改指定列的选项
Options
- id:返回列的名称
- anchor:指定此列中的文本应如何相对于单元格对齐 n, e, s, w center 等
- minwidth:列的最小宽度(以像素为单位)
- stretch:指定调整小部件大小时是否应调整列的宽度。True or False
- width:列的宽度(以像素为单位)
delete(*items)
- 删除指定的项目
exists(item)
- 判断项目时存在
focus(item=None)
- 当有填入参数item,则聚焦于该item,如果没有,会聚焦于最近的,或者没有
heading(column, option=None, **kw)
- 查询或修改指定列的标题选项
Option
- text:列的名称
- image:图标
- anchor:标题的对齐方式,n e s w center 等
- command:添加函数
insert(parent, index, iid=None, **kw)
- 创建新项并返回新创建项的项标识符
item(item, option=None, **kw)
- 查询或修改指定项的选项
move(item, parent, index)
- 将项目移动到父子列表中的位置索引
next(item)
- 下一个项目
prev(item)
- 上一个项目
selection()
- Returns a tuple of selected items
selection_set(*items)
- items becomes the new selection 点中项目
selection_add(*items)
- Add items to the selection
selection_remove(*items)
- Remove items from the selection
xview(args) 和 yview(args)
- 用于设置拖动条的
实例
复制以下代码运行测试时,需要自己填一份Excel表格数据,记得修改路径,数据类似下面这样的
import tkinter as tk
import tkinter.ttk as tk2
import pandas as pd
import tkinter.messagebox
# 这边记得修改路径,换成你的
df = pd.read_excel('C:/Users/data.xlsx')
titles = list(df.columns)
root = tk.Tk()
root.geometry('600x400')
frm = tk.Frame(root)
frm.pack()
tv = tk2.Treeview(frm,columns=titles,show='headings',padding=10)
for col in titles:
tv.heading(column=col,text=col)
tv.column(col,anchor='center') # 这是列里面数据的对其方式
tv.pack()
def get_data():
for i in range(len(df)):
tv.insert(parent='',index='end',values=list(df.iloc[i]))
tv.selection_set(tv.get_children()[0])
def clear():
""" 删除所有项目"""
items = tv.get_children()
for item in items:
tv.delete(item)
def delete():
""" 删除所选项目 """
ss = tv.selection() # 获取选择的项目,返回的是item对象
if ss :
for s in ss:
tv.delete(s)
else:
tkinter.messagebox.showerror(message='没有选中要删除的行')
def t_up():
""" 向上移动 """
items = tv.get_children()
select = tv.selection() # 获取当前选中的
if select:
if select[0] != items[0]:
prev = tv.prev(select[0]) # 当前选中的上一个
tv.selection_set(prev) # 点中项目
else:
tkinter.messagebox.showerror(message='这是第一个不能再往上了!')
else:
tkinter.messagebox.showerror(message='没有选中任何一行,不能移动')
def t_down():
""" 向下移动 """
items = tv.get_children()
num = len(items)
select = tv.selection() # 获取当前选中的
if select:
if select[0] != items[num-1]:
prev = tv.next(select) # 当前选中的上一个
tv.selection_set(prev) # 点中项目
else:
tkinter.messagebox.showerror(message='这是最后一个不能再往下拉!')
else:
tkinter.messagebox.showerror(message='没有选中任何一行,不能移动')
btn = tk.Button(frm,text='GetData',command=get_data)
btn.pack()
btn_d = tk.Button(frm,text='DeleteSelect',command=delete)
btn_d.pack()
btn_c = tk.Button(frm,text='ClearAll',command=clear)
btn_c.pack()
btn_up = tk.Button(frm,text='Up',command=t_up)
btn_up.pack()
btn_down = tk.Button(frm,text='Down',command=t_down)
btn_down.pack()
root.mainloop()
Canvas 画布
参数
之前未提参数说明
参数 | 说明 |
---|---|
confine | 指定 Canvas 控件是否允许滚动超出 scrollregion 选项设置的滚动范围,默认值为 True |
closeenough | 指定一个浮点值,该值指示鼠标光标必须离项目多近才能被认为是在项目“内部”。默认为 1.0 |
Canvas控件绘图常用方法
画线 create_line(x0, y0, x1, y1, ... , xn, yn, options)
Options
- activedash 当画布对象状态为 "active" 的时候,绘制虚线
- activefill 当画布对象状态为 "active" 的时候,填充颜色
- activestipple 当画布对象状态为 "active" 的时候,指定填充的位图
- activewidth 当画布对象状态为 "active" 的时候,指定边框的宽度
- disableddash 当画布对象状态为 "disabled" 的时候,绘制虚线
- disabledfill 当画布对象状态为 "disabled" 的时候,填充颜色
- disabledstipple 当画布对象状态为 "disabled" 的时候,指定填充的位图
- disabledwidth 当画布对象状态为 "disabled" 的时候,指定边框的宽度
- arrow
- "first" 表示添加箭头到线段开始的位置
- "last" 表示添加箭头到线段结束的位置
- "both" 表示两端均添加箭头
- arrowshape 用一个三元组来指定箭头的形状,默认值是 (8, 10, 3),元组中的数值分别代表箭头中三条边的长度
- capstyle 线条的样式
- "butt"(线段的两段平切于起点和终点)
- "projecting"(线段的两段在起点和终点的位置将 width 选项设置的长度分别延长一半)
- "round"(线段的两段在起点和终点的位置将 width设置的长度分别延长一半,并以圆角进行绘制)
- dash 绘制虚线,该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔,比如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔
- dashoffset 指定虚线开始的偏移位置,比如 dash=(5, 1, 2, 1),dashoffset=3,则从 2 开始画虚线
- fill 指定填充的颜色,空字符串表示透明
- joinstyle 指定当绘制两个相邻线段之间时接口的样式,默认为 "round"
- "round"(以连接点为圆心,1/2 width 选项设置的长度为半径来绘制圆角)
- "bevel"(在连接点处将两线段的夹角做平切操作)
- "miter"(沿着两线段的夹角延伸至一个点)
- offset 指定当点画模式时填充位图的偏移
- smooth 默认值为 False,若设置为 True,表示将以曲线的样式代替所绘线段
- splinesteps 当绘制曲线的时,该选项指定由多少条折线来构成曲线,默认值是 12,这里需要注意,只有当 smooth 选项为 True 时该选项才会生效。
- state 指定该画布对象的状态,默认值为 "normal",参数值有 "normal","disabled"(不可用)和 "hidden"(隐藏)三种状态。
- stipple 指定一个位图进行填充,默认值为空字符串,表示实心
- tags 为创建的画布对象添加标签
- width 指定边框的宽度
圆形或椭圆形 create_oval(x0, y0, x1, y1, options)
至少三个点的多边形 create_polygon(x0, y0, x1, y1, ... , xn, yn, options)
矩形 create_rectangle(x0, y0, x1, y1, options)
弧形 create_arc(coord, start, extent, fill)
文本 create_text(x0, y0, text, options)
图片 create_image(x, y, image)
位图 create_bitmap(x, y, bitmap)
- 有gray12、gray25、gray50、gray75、hourglass、error、questhead、info、warning 或 question可选。
对于扇形、矩形、三角形、圆形等,这些封闭式图形可设置的参数
属性 | 方法 |
---|---|
activedash | 当画布对象状态为 "active" 的时候,绘制虚线 |
activefill | 当画布对象状态为 "active" 的时候,填充颜色 |
activeoutline | 当画布对象状态为 "active" 的时候,绘制轮廓线 |
activeoutlinestipple | 当画布对象状态为 "active" 的时候,指定填充轮廓的位图 |
activestipple | 当画布对象状态为 "active" 的时候,指定填充的位图 |
activewidth | 当画布对象状态为 "active" 的时候,指定边框的宽度 |
dash | 指定绘制虚线轮廓,与绘制线段的含义相同 |
dashoffset | 指定虚线轮廓开始的偏移位置 |
disableddash | 当画布对象状态为 "disabled" 的时候,绘制虚线 |
disabledfill | 当画布对象状态为 "disabled" 的时候,填充颜色 |
disabledoutline | 当画布对象状态为 "disabled" 的时候,绘制轮廓线 |
disabledoutlinestipple | 当画布对象状态为 "disabled" 的时候,指定填充轮廓的位图 |
disabledstipple | 当画布对象状态为 "disabled" 的时候,指定填充的位图 |
disabledwidth | 当画布对象状态为 "disabled" 的时候,指定边框的宽度 |
extent | 指定跨度(从 start 选项指定的位置开始到结束位置的角度)默认值是 90.0 |
fill | 与上述表格的含义相同,表示指定的填充颜色,若为空字符串则为透明色 |
offset | 指定当点画模式时填充位置的偏移,参数值为 "x,y"坐标偏移和位置偏移两种方式,比如 "ne"/"e" 等 |
outline | 指定轮廓的颜色 |
outlineoffset | 指定当点画模式绘制轮廓时位图的偏移 |
outlinestipple | 当 outline 选项被设置时,该选项用于指定一个位图来填充边框,默认值是空字符串,表示黑色 |
start | 指定起始位置的偏移角度 |
style | 默认创建的是扇形,指定该方法创建的是扇形("pieslice")、弓形("chord")还是弧形("arc") |
tags | 为创建的画布对象添加标签 |
width | 指定边框的宽度 |