Python 学习之 Tkinter「下」

列表框控件:可以包含一个或者多个文本框。作用:在 ListBox 控件的小窗口显示项目列表

注意 selectmode 几种方式的区别:

1.BROWSE:通常,只能从列表框中选择一行。如果单击一个项目,然后拖动鼠标会跟随选中,是默认的。 2.SINGLE:和 BROWSE 的区别是你只能选择一行,不能拖动。 3.EXTENDED:通过 shift 和 control 可以使 ListBox 支持连选和多选,能拖动 4.MULTIPLE:支持连选和多选,但不能拖动

列表框 ListBox I

# 创建一个 listbox ,并向其中添加元素

lb = tkinter.Listbox(win, selectmode=tkinter.BROWSE)
lb.pack()

for i in ["man", "pig", "dog", "cat"]:
    lb.insert(tkinter.END, i)  # 按顺序依次往后添加元素

lb.insert(tkinter.ACTIVE, "chicken")  # 添加到开始的位置

# 将列表元素当做一个整体添加,不常用
lb.insert(tkinter.END, ["bird", "duck"])

# 删除元素:参数 1 为开始的引用,参数 2 为结束的索引,如果不指出参数 2 ,只删除第一个索引处的内容
lb.delete(1, 2)
lb.delete(1)

# 选中 用法同删除
lb.select_set(0, 1)

# 取消选中,用法同删除
lb.select_clear(0)

print(lb.size)  # 控制台返回元素个数

print(lb.get(0, 2))  # 获取元素值,用法同删除

print(lb.curselection())  # 返回当前的索引值

print(lb.selection_includes(1))  # 判断索引项是否被选中

效果图

列表框 ListBox II

# 绑定变量
v = tkinter.StringVar()

# SINGLE 与 BORWSE 相似,但是不支持鼠标按下后移动选中位置
lb = tkinter.Listbox(win, selectmode=tkinter.SINGLE, listvariable=v)
lb.pack()

for i in ["green", "blue", "yellow", "white"]:
    lb.insert(tkinter.END, i)  

print(v.get())  # 取出元组类型的数据 ('green', 'blue', 'yellow', 'white')

v.set(("one", "two", "three", "four"))  # 设置元素值

# 绑定事件 鼠标双击两次,控制台输出对应的列表项的值
def show(event):
    print(lb.get(lb.curselection()))

lb.bind('<Double-Button-1>', show)

效果图

列表框 ListBox III

# EXTENDED 通过 shift 和 control 可以使 ListBox 支持连选和多选,MULTIPLE 支持连选和多选
lb = tkinter.Listbox(win, selectmode=tkinter.MULTIPLE)

for i in ["green", "blue", "yellow", "white", "red", "black", "man","pig", "dog", "cat", "green", "blue","yellow", "white", "red", "black", "man", "pig", "dog", "cat"]:
    lb.insert(tkinter.END, i) 

sc = tkinter.Scrollbar(win)  # 滚动条
sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)

lb.configure(yscrollcommand=sc.set)  # 关联配置
sc['command']=lb.yview  # 额外给属性赋值

lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH)

效果图

Scale 控件

Scale供用户通过拖拽指示器改变变量的值,可以水平和竖直两个方向,默认竖直

scale = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL,tickinterval=10, length=300)

scale.set(10)  # 设置初始值
scale.pack()

def show():  # 点击按钮显示对应的数值
    print(scale.get())
tkinter.Button(win, text="显示", command=show).pack()

效果图

Spinbox 控件

v = tkinter.StringVar()

def update():
    print(v.get())  # 实时触发值的改变

# 数值范围控件  # increment 步长 默认为 1
sp = tkinter.Spinbox(win, from_=0, to=100, increment=5, textvariable=v, command=update)

# 注意 values 不要与 from_=0, to=100, increment=5 同时使用,不常用
# sp = tkinter.Spinbox(win, values=(0, 2, 4, 6, 8))

v.set(20)  
print(v.get())  

sp.pack()

效果图

Menu 控件 I

# 菜单条
menuBar = tkinter.Menu(win)
win.config(menu=menuBar)

# 创建一个菜单选项
menu1 = tkinter.Menu(menuBar, tearoff=True)

# 给菜单选项添加内容
for i in ["C", "C++", "Java", "Python", "PHP", "JS", "C#", "Mysql", "退出"]:
    if i == "退出":
        menu1.add_separator()  # 添加分割线
        menu1.add_command(label=i, command=win.quit)
    else:
        menu1.add_command(label=i)

menu2 = tkinter.Menu(menuBar, tearoff=False)
for i in ["white", "black", "red", "green", "blue", "yellow", "pink"]:
    menu2.add_command(label=i)

# 向菜单条中添加菜单选项
menuBar.add_cascade(label="Language", menu=menu1)
menuBar.add_cascade(label="Color", menu=menu2)

效果图

Menu 控件 II

# 鼠标右键显示菜单
menuBar = tkinter.Menu(win)

menu = tkinter.Menu(menuBar, tearoff=True)
for i in ["white", "black", "red", "green", "blue", "yellow", "pink"]:
    menu.add_command(label=i)

menuBar.add_cascade(label="Color", menu=menu)

def showMenu(event):
    menuBar.post(event.x_root, event.y_root)
win.bind("<Button-3>", showMenu)

最后一张效果图留给大家去实现,关于 Tkinter 的知识还有很多,之后 Mark 会将其总结出来放在公号后台,大家回复「Tkinter」即可获取,以上知识如有错误之处,望请指正。

原文发布于微信公众号 - Python梦工厂(AzMark950831)

原文发表时间:2018-06-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python研发

Django之Session

答:       Django 完全支持匿名 Session的。 Session 框架允许每一个用户保存并取回数据。它将数据保存在服务器端,并将发送和接收, C...

653
来自专栏大内老A

深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)

Microsoft 的Visual Studio为我们在应用开发中提供的强大功能,我们是有目共睹。借助该工具,是我们的开发 显得更加高效而轻松。从Microso...

17410
来自专栏同步博客

PHP操作Memcached的方法汇总

memcached非关系型数据库安装、php中的memcache的扩展安装、以及php中的memcached的扩展安装可以参考:

542
来自专栏我的博客

ThinkPHP3.1.2笔记

1.开启trace 方法一:在配置文件中添加(默认在config.php,如果定义debug模式,可以定义在debug.php) SHOW_PAGE_TRAC...

2548
来自专栏互联网开发者交流社区

最新jquery+easyui_api培训文档

904
来自专栏更流畅、简洁的软件开发方式

【开源】QuickPager ASP.NET2.0分页控件V2.0.0.6 修改了几个小bug,使用演示。

     由于项目里面还在使用vs2003,还没有使用新的分页控件,所以对新的分页控件的测试还很不到位,遗留了不少的bug,感谢网友试用提出宝贵意见。由于项目正...

2025
来自专栏磨磨谈

ceph luminous 新功能之磁盘智能分组

本篇是luminous一个新功能介绍,关于磁盘智能分组的,这个在ceph里面叫crush class,这个我自己起名叫磁盘智能分组,因为这个实现的功能就是根据磁...

662
来自专栏JavaEE

jsp技术前言:一、简介:二、hello world:三、jsp语法:四、九大内置对象:总结:

我是一名Java后台学习者,但是后台程序员也需要掌握一定的前端技术。虽然说现在前端基本上是react、vue、angular三分天下,但是作为一名Java程序员...

713
来自专栏大内老A

深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)

Microsoft 的Visual Studio为我们在应用开发中提供的强大功能,我们是有目共睹。借助该工具,是我们的开发 显得更加高效而轻松。从Microso...

1735
来自专栏郭耀华‘s Blog

Python 中的 if __name__ == '__main__' 该如何理解

913

扫码关注云+社区