通用方法 | get() | insert(index, content) | delete(first, last=None) |
---|---|---|---|
对内容的操作 | 获取 | 插入 | 删除 |
index | “insert” | “end” | 具体索引 |
---|---|---|---|
插入位置 | 编辑处 | 结尾处 | 指定位置 |
entry = Entry(win)
entry.pack()
entry.insert(0,'1234') #在具体索引位置插入——窗口1
entry.delete(1,3) #删除第1个到第2个字符——窗口2
entry.delete(1) #last_index缺省时,只删除单个字符——窗口3
def insert_a(): entry.insert('insert','a')
Button(win, text='插入a', command=insert_a).pack() #在编辑处插入——窗口4
bar = Scrollbar(win) #创建滚动条
text = Text(win, yscrollcommand=bar.set) #创建text,绑定滚动条
bar.config(command=text.yview) #设置text与滚动条联动
bar.pack(side='right',fill='y')
text.pack()
a = PhotoImage(file="image.png") #插入图片
text.image_create("end",image=a)
text.tag_configure('title', font=('楷体', 20), foreground='red') #设置格式
text.insert(1.0, '标题', 'title') #应用格式
单选钮:选中时,触发绑定的命令。
汇编成组的方法:将多个Radiobutton绑定到同一个变量
b = PhotoImage( file= 'image.png')
a = StringVar()
ttk.Radiobutton(win, variable=a, command=lambda:print(a.get()), text='按钮1', value='文字').pack()
ttk.Radiobutton(win, variable=a, command=lambda:print(a.get()), image=b ).pack()
#点击第一个按钮,屏幕输出【文字】
#点击第二个按钮,屏幕输出【1】
每个Checkbutton绑定一个变量,允许选择多项。默认onvalue = 1,offvalue = 0,也可指定值
def command1():
print(a.get(), b.get())
a = IntVar()
b = IntVar()
ttk.Checkbutton(win, variable=a, command=command1, text='按钮1').pack()
ttk.Checkbutton(win, variable=b, command=command1, text='按钮2').pack()
只钩选按钮2时,屏幕输出结果为:0 1
关键字绑定变量,然后通过变量来设置、删除列表项
a = IntVar()
box = Listbox(win, listvariable=a).pack()
a.set(['a','b','c'])
设置可选择的数量、选择方式
selectmode | 选择模式 | 说明 |
---|---|---|
browse | 单选(默认) | 拖动鼠标可以改选,方向键选中无效 |
single | 单选 | 拖动鼠标无反应 |
multiple | 多选 | 单击可以选中或取消选中 |
extended | 多选 | 可拖动鼠标、使用快捷键快速选中 |
在指定位置添加若干个选项。
刚打开listbox时,index定位在末尾处,第一次无论点击哪里,插入位置固定
index = "ACTIVE"时,在末选项的上方插入;index = "ANCHOR"时,在末选项的下方插入
第二次点击时,在第一次点击位置的上方或下方插入,依此类推
index | 具体位置 | 未选中 | END | ACTIVE | ANCHOR |
---|---|---|---|---|---|
位置 | 一个整数 | 开头处 | 结尾处 | 选中处 | 选中处的下方 |
box.bind("" , lambda event : box.insert(ACTIVE,'11'))
以元组形式,返回选中项的索引。
注意:返回的不是当前选中项的索引,而是上一次点击时,选中项的索引
第一次无论点哪里,结果都是空元组
def command1(event):
a = box.curselection()
print(a)
box = Listbox(win, selectmode='extended')
box.pack()
box.insert(0,'a','b','c')
box.bind("" , command1)
参数:first, last=None,操作first到last,last缺省时,操作单个选项
函数 | delete() | selection_set() | selection_clear() |
---|---|---|---|
作用 | 删除 | 选中 | 取消选中 |
ttk.Combobox = 单行文本框 + 下拉列表框
关键字 | 值 | 设置内容 |
---|---|---|
values | 列表或元组 | 列表项 |
state | enable(默认)、 readonly | 文本框是否可编辑 |
postcommand | 函数名或方法名 | 单击下拉箭头时,触发的函数或方法 |
textvariable | 变量名 | 只能用set()设置单个值 |
def command1(): print(11)
ttk.Combobox(win, values=['a','b'], state='readonly', postcommand =command1).pack()
带上下小箭头的单行文本框,可用小箭头调整值,也可直接输入,设置选项列表的三种方法:
Spinbox(win, values=[1,2,3]).pack() #1,2,3
Spinbox(win, from_=2, to=6, increment=2).pack() #2,4,6
a = IntVar()
Spinbox(win, textvariable=a).pack()
a.set(1) #1
分类 | 参数 | 含义 | 默认值 |
---|---|---|---|
基本设置 | from_ | 最小值 | 0 |
to | 最大值 | 100 | |
resolution | 步长 | 1 | |
轨道格式 | length | 长 | 100 |
width | 宽 | 15 | |
troughcolor | 背景色 | grey75 | |
orient | 方向(默认垂直) | VERTICAL | |
滑块格式 | sliderlength | 长 | 30 |
sliderrelief | 样式 | raised | |
其它 | label | 标签 | |
showvalue | 是否显示当前值 | YES | |
digits | 有效数字最小位数 | 0 | |
variable | 变量 | ||
command | 拖动滑块时触发的命令 |
Scale(win,from_=1,to=6,digits=3, label='标签', orient=HORIZONTAL)
def command1(event): print(scale.get()) #1.0
def command1(event): print(event) #1.0000
def command1(event): print(a.get()) #1
a = IntVar()
scale = Scale(win, to=3, digits=5, variable=a, command=command1)
scale.pack()
自带布局管理功能的容器,可嵌套。
内部组件排列方式:orient = HORIZONTAL(默认) 或 VERTICAL
方法 | 参数 | 作用 |
---|---|---|
add() | child, **kw | 添加子组件(在末位) |
remove() | child | 删除子组件 |
insert() | pos, child, **kw | 在指定位置添加子组件 |
a = PanedWindow(win)
a.pack()
a.add(Label(win, text='按钮1'))
a.add(Label(win, text='按钮2'))
from tkinkter import ttk
Combobox | LabeledScale | Notebook | Progressbar | Treeview |
---|---|---|---|---|
下拉框 | 带标签的Scale | 多文档窗口 | 进度条 | 树 |
平台化的水平滑动条,可设置的选项较少,只有from_,to,compound
compound:设置数值标签的位置,默认在滑动条的上方,修改:compound=BOTTOM
ttk.LabeledScale(win, from_=1, to=6, compound=BOTTOM).pack()
为frame添加标签,一般是【text】,也可以是任意【labelwidget】
参数 | width,height | text | labelwidget | labelanchor | underline | padding |
---|---|---|---|---|---|---|
含义 | 宽、高 | 文字标签 | GUI组件标签 | 标签位置 | 下划线 | 内边距 |
ttk.LabelFrame(win, width=100, height=50, text='标签').pack()
b = Button(win, text='按钮')
b.pack()
ttk.LabelFrame(win, width=100, height=50, labelwidget=b).pack()
ttk.OptionMenu(win, variable, value, *values, *kwargs)
关键词 | variable | value | *values | *kwargs |
---|---|---|---|---|
含义 | 变量 | 按钮文本 | 展开的选项 | 配置其它选项 |
控制菜单的展开方向:direction,参数:below, above, left, right, flush
def test(event): print(a.get())
a = StringVar()
ttk.OptionMenu(win, a, "主菜单", "子菜单1", "子菜单2", command=test).pack()
继承Toplevel后,可以自创对话框样式,必要时可用grab_set()方法转化为模式对话框。此外,python提供了多种预设的对话框。
依赖于其它窗口,打开时占据焦点
参数 | title | text | buttons | cancel | default |
---|---|---|---|---|---|
含义 | 标题 | 内容 | 按钮文本(列表形式) | 关闭按钮的返回值 | 获得焦点的按钮 N |
【go()】方法:获得按钮ID或cancel的值——点击任何按钮都会关闭窗口
from tkinter import simpledialog
a = simpledialog.SimpleDialog(win, title='标题', text='内容', buttons=['按钮1','按钮2'], default=1, cancel=5)
print(a.go())
不附属于其它窗口,但是运行时必须有其它窗口存在,点击【OK】时,返回值
样式:标题 + 内容 + Entry框 + OK按钮(返回内容) + Cancel按钮
方法 | askinteger | askfloat | askstring |
---|---|---|---|
输入限制 | 整数 | 浮点数 | 字符串 |
参数 | title | prompt | initialvalue | minvalue | maxvalue |
---|---|---|---|---|---|
含义 | 标题 | 内容 | 初始值 | 最小值 | 最大值 |
win = Tk()
a = simpledialog.askinteger('标题', '内容', initialvalue=3)
print(a) #3
以字典形式设置各参数,用对象的num属性获得按钮ID
参数 | title | text | strings | bitmap | default |
---|---|---|---|---|---|
含义 | 标题 | 内容 | 按钮文本(列表形式) | 位图 | 获得焦点的按钮 N |
十个内置位图:error,grey75/50/25/12,hourglass,info,questhead,question,warning
from tkinter import dialog
a = dialog.Dialog(win, {"title": '标题',
"text": '内容',
"bitmap": 'error',
"strings": ["按钮0","按钮1","按钮2"],
"default": 1})
print(a.num)
对话框的样式依赖于平台;各参数只能用关键词(非位置)传入;文件流可用于读写文件内容
输出:目录路径(字符串)——不是文件
参数 | parent | title | initialdir |
---|---|---|---|
含义 | 主窗口 | 标题 | 初始目录 |
默认值 | 无 | 打开 | 上次打开的目录 |
from tkinter import filedialog as f
f.askdirectory(parent=win, title='标题', initialdir='C:/') #C:/Users
askopenfile()返回文件流,askopenfilename()返回文件路径,除askdirectory()的参数,另有:
initialfile:初始选择的文件
filetypes:可选的文件类型,【*】表示所有文件类型。由(说明,文件类型)元组构建列表
要打开多个文件时,可以用askopenfiles()、askopenfilenames()
var = [("文本文件", "*.txt"), ("说明", "*")]
f.askopenfile(initialfile=1, filetype=var)
#<_io.TextIOWrapper name='C:/2020.txt' mode='r' encoding='cp936'>
asksaveasfile()返回文件流,asksaveasfilename()返回文件路径,除askopen的参数外,还有:
confirmoverwrite:启用或禁用文件存在性检查——防止覆盖已有文件,默认启用【True】
defaultextension:用户未输入扩展名时,系统默认添加的扩展名。默认为空
注意:打开没有扩展名的文件时,系统会询问【打开方式】
f.asksaveasfile(defaultextension=".111")
colorchooser.askcolor(win, title, color),点击确定时,返回用户选择的颜色
from tkinter import colorchooser
colorchooser.askcolor() #((160.625, 160.625, 160.625), '#a0a0a0')
colorchooser.askcolor(title="自定义标题", color='#FFFFFF')
#((255.99609375, 255.99609375, 255.99609375), '#ffffff')
参数 | parent | title | message | detail | default |
---|---|---|---|---|---|
含义 | 主窗口 | 标题 | 信息 | 详细信息 | 默认选项 |
from tkinter import messagebox
messagebox.showinfo(title="标题", message="信息", detail="详情")
可在内置样式的基础上,修改关于图标样式等设置,以实现不同的效果
参数 | 含义 | 可选项 | |||||
---|---|---|---|---|---|---|---|
icon | 图标 | error info question warning | |||||
type | 按钮 | ok yesno okcancel yesnocancel retrycancel abortretryignore | |||||
default | 初始焦点 | abort, retry, ignore, ok, cancel, no, yes |
选项 | label | image | compound |
---|---|---|---|
含义 | 文本 | 图标 | 图文关系 |
把一个菜单设置成另一菜单的子菜单
a.add_cascade(menu=b) #b为a的子菜单
方法 | add_command() | add_checkbutton() | add_radiobutton() | add_separator() |
---|---|---|---|---|
内容 | 普通菜单项 | 单选框 | 复选框 | 分隔条 |
把菜单直接放置在窗口中,就会创建菜单条。
可以在菜单下方创建frame并放置多个按钮,做出工具条的效果
from tkinter import *
from tkinter import Menu
def create_menu():
menu = Menu()
menu.add_command(label="普通项1", command=lambda:print(1))
menu.add_separator()
menu.add_command(label="普通项2", command=lambda:print(2))
return menu
win = Tk()
a = Menu() #创建菜单
win["menu"] = a #把菜单放置在窗口中(菜单条)
a.add_cascade(label="菜单1", command=print(3)) #添加子菜单,直接设置命令
a.add_cascade(label="菜单2", menu=create_menu()) #添加带部件的子菜单
为目标组件绑定右键单击事件,右击时,调用菜单的post()方法,在指定位置(x,y)弹出菜单
win = Tk()
a = create_menu()
button = Button(win, text='按钮1')
button.bind("" , lambda event:a.post(event.x_root, event.y_root))
button.pack()