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

tkinter destroy全部删除 tkinter删除组件_tkinter destroy全部删除

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')          #应用格式

tkinter destroy全部删除 tkinter删除组件_python_02

# 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】

tkinter destroy全部删除 tkinter删除组件_git_03

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

tkinter destroy全部删除 tkinter删除组件_滑块_04

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

# Listbox 列表框

listvariable

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

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

tkinter destroy全部删除 tkinter删除组件_滑块_05

selectmode

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

selectmode

选择模式

说明

browse

单选(默认)

拖动鼠标可以改选,方向键选中无效

single

单选

拖动鼠标无反应

multiple

多选

单击可以选中或取消选中

extended

多选

可拖动鼠标、使用快捷键快速选中

insert(index, *elements)

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

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

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

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

index

具体位置

未选中

END

ACTIVE

ANCHOR

位置

一个整数

开头处

结尾处

选中处

选中处的下方

box.bind("<Button-1>", 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("<Button-1>", 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()

tkinter destroy全部删除 tkinter删除组件_python_06

# 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

tkinter destroy全部删除 tkinter删除组件_子菜单_07

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

tkinter destroy全部删除 tkinter删除组件_tkinter destroy全部删除_08

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

tkinter destroy全部删除 tkinter删除组件_子菜单_09

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

tkinter destroy全部删除 tkinter删除组件_python_10

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

tkinter destroy全部删除 tkinter删除组件_tkinter destroy全部删除_11

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

tkinter destroy全部删除 tkinter删除组件_python_12

# 对话框

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

tkinter destroy全部删除 tkinter删除组件_tkinter destroy全部删除_13

# 输入限制对话框

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

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

方法

askinteger

askfloat

askstring

输入限制

整数

浮点数

字符串

参数

title

prompt

initialvalue

minvalue

maxvalue

含义

标题

内容

初始值

最小值

最大值

win = Tk()
a = simpledialog.askinteger('标题', '内容', initialvalue=3)
print(a)  #3

tkinter destroy全部删除 tkinter删除组件_滑块_14

普通对话框 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)

tkinter destroy全部删除 tkinter删除组件_tkinter destroy全部删除_15

对话框-文件 filedialog

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

打开目录 askdirectory()

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

参数

parent

title

initialdir

含义

主窗口

标题

初始目录

默认值


打开

上次打开的目录

from tkinter import filedialog as f
f.askdirectory(parent=win, title='标题', initialdir='C:/')     #C:/Users

tkinter destroy全部删除 tkinter删除组件_python_16

打开文件 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'>

tkinter destroy全部删除 tkinter删除组件_git_17

保存文件 asksaveas

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

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

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

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

f.asksaveasfile(defaultextension=".111")

tkinter destroy全部删除 tkinter删除组件_python_18

# 对话框 - 颜色选择 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')

tkinter destroy全部删除 tkinter删除组件_tkinter destroy全部删除_19

消息框 messagebox

参数

parent

title

message

detail

default

含义

主窗口

标题

信息

详细信息

默认选项

内置样式

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

tkinter destroy全部删除 tkinter删除组件_git_20

  1. 信息 + 【是】【否】按钮,【关闭】按钮不可用:askquestion = askyesno
  2. tkinter destroy全部删除 tkinter删除组件_python_21

  3. 信息 + 【关闭】按钮 + 其它按钮:askokcancel, askretrycancel, askyesnocancel
  4. tkinter destroy全部删除 tkinter删除组件_tkinter destroy全部删除_22

自定义样式

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

参数

含义

可选项

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

tkinter destroy全部删除 tkinter删除组件_python_23

右键菜单

为目标组件绑定右键单击事件,右击时,调用菜单的post()方法,在指定位置(x,y)弹出菜单

win = Tk()
a = create_menu()  
button = Button(win, text='按钮1')
button.bind("<Button-3>", lambda event:a.post(event.x_root, event.y_root))
button.pack()

tkinter destroy全部删除 tkinter删除组件_子菜单_24