Tkinter
是Python
的标准GUI
库。Python
使用 Tkinter
能够快速的建立GUI
应用程序。Tkinter
是内置到python
的安装包中、只要安装好Python
以后就能import Tkinter
库、并且IDLE
也是用Tkinter
编写而成、对于简单的图形界面Tkinter
仍是能应付自如Tkinter
模块和Button
, Label
等部分控件Listbox
, Scale
, Menu
, Frame
等部分控件的使用Listbox
列表框一个能够包含一个或多个文本项的列表框,能够设置为单选或多选python
Listbox
lb = Listbox(window, selectmode = EXTENDED)
lb.pack()
复制代码
selectmode
: 设置列表框的样式(默认值-BROWSE
), 有四个可选项
SINGLE
: 单选, 不能经过鼠标的移动选中新的item
, 只能点选BROWSE
: 单选, 能够经过鼠标的移动选中新的位置(item
并不会移动)MULTIPLE
: 多选, 可是只能经过鼠标点击进行多选EXTENDED
: 多选, 按住Shift
能够实现连选, 按住Control
能够实现多选Listbox
使用insert
来添加一个元素,其中参数一为添加的索引值, 参数二为要添加的元素ACTIVE
是向当前选中的item
前插入一个(即便用当前选中的索引做为插入位置)END
是想最后添加一个元素for item in ["good", "nice", "handsome", "vg", "vn"]:
# 按顺序添加
lb.insert(END, item)
# 在开始位置添加
lb.insert(ACTIVE, 'Titan')
# 在最后添加
lb.insert(END, 'jun')
# 在具体的索引出添加元素
lb.insert(2, 'lululu')
# 把列表当成一个元素添加
lb.insert(ACTIVE, [1, 2, 3])
# 添加元组
lb.insert(ACTIVE, ('che', '09'))
复制代码
def selection_set(self, first, last=None):
复制代码
#删除 参数1为开始的索引,参数2为结束的索引,若是不指定参数2,只删除第一个索引处的内容
# lb.delete(1, 2)
# lb.delete(1)
#选中 参数1为开始的索引,参数2为结束的索引,若是不指定参数2,只选中第一个索引处的内容
lb.selection_set(2, 5)
lb.selection_set(0)
# 取消
lb.selection_clear(3, 4)
lb.selection_clear(0)
#获取到列表中的元素的个数
print(lb.size())
#从列表中取值 参数1为开始的索引,参数2为结束的索引,若是不指定参数2,只获取第一个索引处的内容
print(lb.get(1, 3))
print(lb.get(5))
#返回当前的索引项,不是item元素
print(lb.curselection())
# 判断某选项是否被选中
print(lb.selection_includes(3))
print(lb.selection_includes(5))
复制代码
Listbox
不支持command
属性来设置回调函数了,使用bind
来指定回调函数# 绑定变量
lbv = StringVar()
lb = Listbox(window, selectmode = SINGLE, listvariable = lbv)
lb.pack()
for item in ["good", "nice", "handsome", "jun", "titan"]:
lb.insert(END, item)
# 打印当前列表中的选项
print(lbv.get())
print(lb.get(1))
# 设置选项(全部从新赋值)
# lbv.set((1, 2, 3))
# 绑定事件
def listboxAction(event):
print(lb.get(lb.curselection()))
# 第一个参数表示操做样式, 这里是双击操做, 1表明鼠标左键
lb.bind('<Double-Button-1>', listboxAction)
复制代码
Listbox
的内容超过所容纳范围时, 内容须要滚动显示, 相似上文中提到的Text
文本的多行显示, 这里就须要添加滚动条git
效果图以下github
# 滚动
lb = Listbox(window, selectmode=EXTENDED)
for item in ["good", "nice", "handsome", "from", "thinter","good1", "nice1", "handsome1", "vg1", "vn1","good3", "nice3", "handsome3", "vg3", "vn3"]:
lb.insert(END, item)
# 滚动条
sc = Scrollbar(window)
sc.pack(side = RIGHT, fill = Y)
lb.configure(yscrollcommand = sc.set)
lb.pack(side = LEFT, fill = BOTH)
# 额外给属性赋值
sc["command"] = lb.yview
复制代码
Scale
拽指示器供用户经过拖拽指示器改变变量的值,能够水平,也能够竖直, 下面是相关属性介绍编程
from_
: 设置最小值to
: 设置最大值resolution
: 步距, 每次移动增长的最小单位orient
: 显示方向(水平-HORIZONTAL
, 垂直-Variable
)variable
: 绑定变量command
: 绑定回调函数length
: 控件的长度(垂直方向上则是高度)digits
: 控制显示的数字位数scale = Scale(window, from_ = 0, to = 100, orient = HORIZONTAL, length = 200, label='choice:')
scale.pack()
# 设置初始值
scale.set(34)
# 取值
def showNumber(event):
print(scale.get())
scale["command"] = showNumber
复制代码
效果图以下ide
Spinbox
数值范围控制器Spinbox
和组件Scale
相似, 都是根据需求显示一个范围内的内容Spinbox
去能拖拽, 只能点击增长或减小; Scale
能够拖拽选择# 绑定变量
spinStr = StringVar()
# 事件监听
def updateAction():
# 在最后拼接上'12'
# spin1.insert(END, 12)
print(spinStr.get())
'''属性介绍: from_: 起始值 to: 最大值 increment: 步长 textvariable: 绑定变量 command: 绑定函数, 事件监听 values: 设置后, 每次更新值将使用values指定的值 '''
# spin = Spinbox(window, from_ = 0, to = 100, increment = 10, textvariable = spinStr, command = updateAction)
# spin.pack()
spin1 = Spinbox(window, values=[0, 10, 30, 50, 80, -9], increment = 10, textvariable = spinStr, command = updateAction, bg='red')
spin1.pack()
复制代码
效果图以下函数
Menu
菜单Menu
是被用来显示在标题栏/窗口或者其余顶层窗口上的菜单栏布局
添加菜单项, 单纯的添加以后没有任何效果post
# 菜单条
menubar = Menu(window)
window.configure(menu=menubar)
复制代码
下面给菜单添加菜单列表选项, 添加以后只有菜单列表, 可是每个菜单却没有下拉列表ui
# 建立一个菜单选项
menu1 = Menu(menubar, tearoff=False)
# 想菜单条上添加菜单选项
menubar.add_cascade(label='语言', menu=menu1)
menu2 = Menu(menubar, tearoff=False)
menubar.add_cascade(label='颜色', menu=menu2)
复制代码
给每个菜单添加下拉列表和监听事件spa
def menuAction1():
print('menubar')
# 菜单条
menubar = Menu(window)
window.configure(menu=menubar)
# 建立一个菜单选项
menu1 = Menu(menubar, tearoff=False)
# 菜单选项添加内容
for item in ['Python', 'PHP', 'CPP', 'C', 'Java', 'JavaScript', 'VBScript', 'Exit']:
if item == 'Exit':
# 添加分割线
menu1.add_separator()
menu1.add_command(label=item, command=window.quit)
else:
menu1.add_command(label=item, command=menuAction1)
# 想菜单条上添加菜单选项
menubar.add_cascade(label='语言', menu=menu1)
# 菜单2的事件处理
def menuAction2():
print(menuStr.get())
menuStr = StringVar()
menu2 = Menu(menubar, tearoff=True)
for item in ['red', 'orange', 'blue', 'gray']:
menu2.add_radiobutton(label=item, variable=menuStr, command=menuAction2)
# 添加到菜单列表
menubar.add_cascade(label='颜色', menu=menu2)
复制代码
效果图以下
tearoff
属性介绍
tearoff
是控制菜单可否独立出来的属性, 取值有True
和False
tearoff
设置为True
之后,就是代表这个菜单是能够独立出来的,若是是False
的话就不能够独立出来Mac
中尝试了一下, 发现没有什么效果; 在Windows
系统中会有一条虚线, 点击虚线, 会跳出一个悬浮菜单; 有Windows
系统的童鞋能够试一下# 鼠标右键菜单
menubar2 = Menu(window)
menu3 = Menu(menubar2, tearoff=False)
for item in ['Python', 'PHP', 'CPP', 'C', 'Java', 'JavaScript', 'VBScript', 'Exit']:
menu3.add_command(label=item)
menubar2.add_cascade(label='开发语言', menu=menu3)
# 用于显示菜单
def showMenu(event):
print('window')
# 鼠标点击处的坐标
menubar2.post(event.x_root, event.y_root)
# window绑定鼠标事件
window.bind("<Button-2>", showMenu)
复制代码
效果图以下
菜单中每一项的删除和添加都是根据索引操做的
# 添加/删除菜单
def menuClick():
print("menu3")
# 添加command项
menu3.insert_command(1, label='command', command=menuClick)
# 添加radiobutton项
menu3.insert_radiobutton(3, label='radiobutton', command=menuClick)
# 添加checkbutton项
menu3.insert_checkbutton(5, label='checkbutton', command=menuClick)
# 添加分割线
menu3.insert_separator(4)
# menu3.insert_separator(0)
# 删除
# 两个参数: 参数1为开始的索引,参数2为结束的索引,若是不指定参数2,只获取第一个索引处的内容
menu3.delete(2, 4)
menu3.delete(0)
复制代码
Combobox
下拉控件# 绑定变量
cv = StringVar()
combo = ttk.Combobox(window, textvariable=cv)
combo.pack()
# 设置下拉菜单数据(元组数据)
combo['value'] = ('杭州', '湖州', '温州', '嘉兴', '舟山')
# 设置默认值
combo.current(0)
# 绑定事件
def comboboxClick(event):
print(cv.get())
print(combo.get())
combo.bind('<<ComboboxSelected>>', comboboxClick)
复制代码
效果图以下
Frame
布局Frame
就是屏幕上的一块矩形区域,可能是用来做为容器(container
)来布局窗体
# 第一层容器
frame = Frame(window)
frame.pack()
# 左边容器
leftFrame = Frame(frame)
Label(leftFrame, text='左上位置', bg='red', height=5, width=10).pack(side=TOP)
Label(leftFrame, text='左下位置', bg='yellow', height=5, width=10).pack(side=TOP)
leftFrame.pack(side=LEFT)
# 右边容器
rightFrame = Frame(frame)
Label(rightFrame, text='右上位置', bg='orange', height=5, width=10).pack(side=TOP)
Label(rightFrame, text='右下位置', bg='blue', height=5, width=10).pack(side=TOP)
rightFrame.pack(side=RIGHT)
复制代码
效果图以下
Tkinter
的大部分组件已经基本都介绍完了Tkinter
涉及到的数据类型和布局方式