当前位置:   article > 正文

第11章 Tkinter 常用组件_entry.insert(0, "2")

entry.insert(0, "2")

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

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')          #应用格式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

# 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】
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

# 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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

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

# Listbox 列表框

listvariable

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

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

在这里插入图片描述

selectmode

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

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

insert(index, *elements)

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

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

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

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

index具体位置未选中ENDACTIVEANCHOR
位置一个整数开头处结尾处选中处选中处的下方
box.bind("<Button-1>", lambda event : box.insert(ACTIVE,'11'))
  • 1
  • 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

更多方法

参数:first, last=None,操作first到last,last缺省时,操作单个选项

函数delete()selection_set()selection_clear()
作用删除选中取消选中

# Combobox 复合框

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

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

在这里插入图片描述

# 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  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

# Scale 滑动条

分类参数含义默认值
基本设置from_最小值0
to最大值100
resolution步长1
轨道格式length100
width15
troughcolor背景色grey75
orient方向(默认垂直)VERTICAL
滑块格式sliderlength30
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)
  • 1

![在这里插入图片描述](https://img-blog.csdnimg.cn/5e0987896a2949708114d09bb4c2929d.png

获取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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

# 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'))
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

# ttk常用组件

from tkinkter import ttk
  • 1
ComboboxLabeledScaleNotebookProgressbarTreeview
下拉框带标签的Scale多文档窗口进度条

# ttk.LabeledScale

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

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

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

在这里插入图片描述

# ttk.LabelFrame

为frame添加标签,一般是【text】,也可以是任意【labelwidget】

参数width,heighttextlabelwidgetlabelanchorunderlinepadding
含义宽、高文字标签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()
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

# ttk.OptionMenu 带菜单的按钮

ttk.OptionMenu(win, variable, value, *values, *kwargs)

关键词variablevalue*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()
  • 1
  • 2
  • 3

在这里插入图片描述

# 对话框

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

# 简单对话框 simpledialog.SimpleDialog

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

参数titletextbuttonscanceldefault
含义标题内容按钮文本(列表形式)关闭按钮的返回值获得焦点的按钮 N

【go()】方法:获得按钮ID或cancel的值——点击任何按钮都会关闭窗口

from tkinter import simpledialog
a = simpledialog.SimpleDialog(win, title='标题', text='内容', buttons=['按钮1','按钮2'], default=1, cancel=5)
print(a.go())
  • 1
  • 2
  • 3

在这里插入图片描述

# 输入限制对话框

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

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

方法askintegeraskfloataskstring
输入限制整数浮点数字符串
参数titlepromptinitialvalueminvaluemaxvalue
含义标题内容初始值最小值最大值
win = Tk()
a = simpledialog.askinteger('标题', '内容', initialvalue=3)
print(a)  #3
  • 1
  • 2
  • 3

在这里插入图片描述

普通对话框 dialog.Dialog

以字典形式设置各参数,用对象的num属性获得按钮ID

参数titletextstringsbitmapdefault
含义标题内容按钮文本(列表形式)位图获得焦点的按钮 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

对话框-文件 filedialog

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

打开目录 askdirectory()

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

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

在这里插入图片描述

打开文件 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'>
  • 1
  • 2
  • 3

在这里插入图片描述

保存文件 asksaveas

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

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

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

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

f.asksaveasfile(defaultextension=".111")
  • 1

在这里插入图片描述

# 对话框 - 颜色选择 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')
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

消息框 messagebox

参数parenttitlemessagedetaildefault
含义主窗口标题信息详细信息默认选项

内置样式

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

在这里插入图片描述

  1. 信息 + 【是】【否】按钮,【关闭】按钮不可用:askquestion = askyesno
    在这里插入图片描述

  2. 信息 + 【关闭】按钮 + 其它按钮:askokcancel, askretrycancel, askyesnocancel
    在这里插入图片描述

自定义样式

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

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

# 菜单 Menu

支持的选项

选项labelimagecompound
含义文本图标图文关系

添加子菜单

把一个菜单设置成另一菜单的子菜单

a.add_cascade(menu=b)  #b为a的子菜单
  • 1

添加其它内容

方法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())  #添加带部件的子菜单
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

右键菜单

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

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/499238
推荐阅读
相关标签
  

闽ICP备14008679号