第11章 Tkinter 常用组件

Entry 与 Text

通用方法

通用方法 get() insert(index, content) delete(first, last=None)
对内容的操作 获取 插入 删除
index “insert” “end” 具体索引
插入位置 编辑处 结尾处 指定位置
  • Entry的index为数字,表示第n个字符
  • Text的index为行列号(row.column),1.0表示第1行第1列
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

在这里插入图片描述

Text特有方法

  1. 绑定滚动条
  2. 插入图片 image_create(index, cnf={}, **kw)
  3. 设置文本格式 insert(index, chars, *args),【*args】中可传入多个tag以控制格式
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')          #应用格式

第11章 Tkinter 常用组件_第1张图片

# Radiobutton

单选钮:选中时,触发绑定的命令。

汇编成组的方法:将多个Radiobutton绑定到同一个变量

  1. 可以显示图片,设置【image】参数即可
  2. 【value】缺省时,默认值为【1】
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】

第11章 Tkinter 常用组件_第2张图片

# Checkbutton

每个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()

第11章 Tkinter 常用组件_第3张图片

只钩选按钮2时,屏幕输出结果为:0 1

# Listbox 列表框

listvariable

关键字绑定变量,然后通过变量来设置、删除列表项

a = IntVar()
box = Listbox(win, listvariable=a).pack()
a.set(['a','b','c'])

第11章 Tkinter 常用组件_第4张图片

selectmode

设置可选择的数量、选择方式

selectmode 选择模式 说明
browse 单选(默认) 拖动鼠标可以改选,方向键选中无效
single 单选 拖动鼠标无反应
multiple 多选 单击可以选中或取消选中
extended 多选 可拖动鼠标、使用快捷键快速选中

insert(index, *elements)

在指定位置添加若干个选项。

刚打开listbox时,index定位在末尾处,第一次无论点击哪里,插入位置固定

index = "ACTIVE"时,在末选项的上方插入;index = "ANCHOR"时,在末选项的下方插入

第二次点击时,在第一次点击位置的上方或下方插入,依此类推

index 具体位置 未选中 END ACTIVE ANCHOR
位置 一个整数 开头处 结尾处 选中处 选中处的下方
box.bind("", lambda event : box.insert(ACTIVE,'11'))
  • listbox没有command选项,可以用bind方法绑定命令
  • 此设置下,无论何种模式,都只能选中一项
  • 绑定鼠标单击事件时,用键盘改选位置不会触发事件,index取决于单击操作
  • index参考的位置不是当前点击的位置,而是上一次点击的位置

curselection()

以元组形式,返回选中项的索引。

注意:返回的不是当前选中项的索引,而是上一次点击时,选中项的索引

第一次无论点哪里,结果都是空元组

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()
作用 删除 选中 取消选中

# Combobox 复合框

ttk.Combobox = 单行文本框 + 下拉列表框

关键字 设置内容
values 列表或元组 列表项
state enable(默认)、 readonly 文本框是否可编辑
postcommand 函数名或方法名 单击下拉箭头时,触发的函数或方法
textvariable 变量名 只能用set()设置单个值
def command1(): print(11)
ttk.Combobox(win, values=['a','b'], state='readonly', postcommand =command1).pack()

第11章 Tkinter 常用组件_第5张图片

# Spinbox组件

带上下小箭头的单行文本框,可用小箭头调整值,也可直接输入,设置选项列表的三种方法:

  1. values
  2. 一组关键词:from_, to, increment
  3. textvariable——只能用set()设置单个值
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  

在这里插入图片描述

# Scale 滑动条

分类 参数 含义 默认值
基本设置 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 拖动滑块时触发的命令
  • 设置了【to】时,【digits】才会生效
  • 设置水平方向:HORIZONTAL
  • 更多滑块样式:flat,sunken,groove,ridge
Scale(win,from_=1,to=6,digits=3, label='标签', orient=HORIZONTAL)

第11章 Tkinter 常用组件_第6张图片

获取Scale当前值的三种方法

  1. scale.get()
  2. value 保留digits设置的位数
  3. 变量名.get()
    示例:每次拖动滑块时,打印滑块的值。注意:command1要带【event】参数
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()

# Panedwindow

自带布局管理功能的容器,可嵌套。

内部组件排列方式: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'))

在这里插入图片描述

# ttk常用组件

from tkinkter import ttk
Combobox LabeledScale Notebook Progressbar Treeview
下拉框 带标签的Scale 多文档窗口 进度条

# ttk.LabeledScale

平台化的水平滑动条,可设置的选项较少,只有from_,to,compound

compound:设置数值标签的位置,默认在滑动条的上方,修改:compound=BOTTOM

ttk.LabeledScale(win, from_=1, to=6, compound=BOTTOM).pack()

第11章 Tkinter 常用组件_第7张图片

# ttk.LabelFrame

为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()

第11章 Tkinter 常用组件_第8张图片

# ttk.OptionMenu 带菜单的按钮

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()

第11章 Tkinter 常用组件_第9张图片

# 对话框

继承Toplevel后,可以自创对话框样式,必要时可用grab_set()方法转化为模式对话框。此外,python提供了多种预设的对话框。

# 简单对话框 simpledialog.SimpleDialog

依赖于其它窗口,打开时占据焦点

参数 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())

第11章 Tkinter 常用组件_第10张图片

# 输入限制对话框

不附属于其它窗口,但是运行时必须有其它窗口存在,点击【OK】时,返回值

样式:标题 + 内容 + Entry框 + OK按钮(返回内容) + Cancel按钮

方法 askinteger askfloat askstring
输入限制 整数 浮点数 字符串
参数 title prompt initialvalue minvalue maxvalue
含义 标题 内容 初始值 最小值 最大值
win = Tk()
a = simpledialog.askinteger('标题', '内容', initialvalue=3)
print(a)  #3

第11章 Tkinter 常用组件_第11张图片

普通对话框 dialog.Dialog

以字典形式设置各参数,用对象的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)

第11章 Tkinter 常用组件_第12张图片

对话框-文件 filedialog

对话框的样式依赖于平台;各参数只能用关键词(非位置)传入;文件流可用于读写文件内容

打开目录 askdirectory()

输出:目录路径(字符串)——不是文件

参数 parent title initialdir
含义 主窗口 标题 初始目录
默认值 打开 上次打开的目录
from tkinter import filedialog as f
f.askdirectory(parent=win, title='标题', initialdir='C:/')     #C:/Users

第11章 Tkinter 常用组件_第13张图片

打开文件 askopen

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'>

第11章 Tkinter 常用组件_第14张图片

保存文件 asksaveas

asksaveasfile()返回文件流,asksaveasfilename()返回文件路径,除askopen的参数外,还有:

confirmoverwrite:启用或禁用文件存在性检查——防止覆盖已有文件,默认启用【True】

defaultextension:用户未输入扩展名时,系统默认添加的扩展名。默认为空

注意:打开没有扩展名的文件时,系统会询问【打开方式】

f.asksaveasfile(defaultextension=".111")

在这里插入图片描述

# 对话框 - 颜色选择 colorchooser

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')

第11章 Tkinter 常用组件_第15张图片

消息框 messagebox

参数 parent title message detail default
含义 主窗口 标题 信息 详细信息 默认选项

内置样式

  1. 只展示信息,带【关闭】按钮:showinfo, showwarning, showerror
from tkinter import messagebox
messagebox.showinfo(title="标题", message="信息", detail="详情")

第11章 Tkinter 常用组件_第16张图片

  1. 信息 + 【是】【否】按钮,【关闭】按钮不可用:askquestion = askyesno
    第11章 Tkinter 常用组件_第17张图片

  2. 信息 + 【关闭】按钮 + 其它按钮:askokcancel, askretrycancel, askyesnocancel
    第11章 Tkinter 常用组件_第18张图片

自定义样式

可在内置样式的基础上,修改关于图标样式等设置,以实现不同的效果

参数 含义 可选项
icon 图标 error info question warning
type 按钮 ok yesno okcancel yesnocancel retrycancel abortretryignore
default 初始焦点 abort, retry, ignore, ok, cancel, no, yes

# 菜单 Menu

支持的选项

选项 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())  #添加带部件的子菜单

第11章 Tkinter 常用组件_第19张图片

右键菜单

为目标组件绑定右键单击事件,右击时,调用菜单的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()

第11章 Tkinter 常用组件_第20张图片

你可能感兴趣的:(疯狂Python讲义,李刚,读书笔记,python)