Tkinter简介
是python内置的标准GUI库,在安装python后,导入模块即可正常使用,Tk和Tkinter可在大多数的Unix,以及Windows和Macintosh系统上运行。
关于Tkinter的导入(注意大小写)
在2.x版本上,编写为:from Tkinter import *
在3.x版本上,编写为:from tkinter import *
Tkinter组件
控件 | 描述 |
Button | 按钮控件 |
Canvas | 画布控件,显示图形元素如线条或文本 |
Checkbutton | 多选框控件,不存在互斥,可多个选择 |
Entry | 输入控件,用于输入或者显示文本内容 |
Frame | 框架控件,在屏幕上显示一个矩形区,多用于作为容器 |
Label | 标签控件,可用于显示文本和位图 |
Listbox | 列表控件 |
Menubutton | 菜单项按钮控件 |
Menu | 菜单控件,显示菜单栏,下拉菜单和弹出菜单等 |
Message | 消息控件,用于显示多行文本,与Label类似 |
Radiobutton | 多选框控件,存在互斥,多个只能选择一个 |
Scale | 范围控件,显示一个数值刻度并设定范围 |
Scrollbar | 滚动条控件,当内容超过可视化区域的时候使用,比如列表框 |
Text | 文本控件,用于显示多行文本 |
Toplevel | 容器控件,用来提供一个单独的对话框,和Frame类似 |
Spinbox | 输入控件,与Entry类似,但是可以指定输入范围值 |
PanedWindow | 窗口布局管理的插件,可以包含一个或多个子控件 |
LabelFrame | 容器控件,常用于负责的窗口布局 |
tkMessageBox | 用于显示你应用程序的消息框 |
Tkinter组件的共同属性
属性 | 描述 |
Dimension | 控件大小 |
Color | 控件颜色 |
Font | 控件字体 |
Anchor | 锚点 |
Relief | 控件样式 |
Bitmap | 位图 |
Cursor | 光标 |
Tkinter组件的布局管理,有三种:pack, grid,place。
关于布局管理的,推荐网友博客(感谢分享):https://blog.csdn.net/liuxu0703/article/details/54428405
关于Grid讲解的,推荐网友博客:https://blog.csdn.net/ligou8000/article/details/46331075
我只简单的说明grid的几种属性,用于大家对下面控件示例代码的理解。
option | 说明 |
row | 控件摆放的行数值,从0开始, |
column | 控件摆放的列数值,从0开始 |
rowspan | 可指定控件跨越多行显示, |
column | 可指定控件跨越多列显示, |
padx | x轴方向的填充,在控件外部的左右部分填充指定长度,数值必须大于0 |
pady | y轴方向的填充,在控件外部的上下部分填充指定长度,数值必须大于0 |
sticky | 控件的对齐方式,默认会居中显示,可以使用的值有: N/S/E/W,分别代表上,下,左,右。 如果你希望控件左对齐的话,可以编写程序: sticky=E 如果你希望控件左上对齐的话,可以编写程序: sticky=E+N |
Tkinter的使用示例:
首先搭建框架相关
# -*- coding:utf-8 -*-
# __author__ = 'Code~'
import Tkinter # 引用Tkinter库
from Tkinter import * # 导入Tkinter库方法
DEF_PATH = 'C:\Python27'
# 消息框模块
class MsgBox:
def __init__(self):
# 创建Tkinter对象
self.root = Tkinter.Tk()
# 标题
self.root.title('Tkinter Demo')
# 设定窗口大小,注意‘x’一定要小写,否则TclError: bad geometry specifier "500X400"
self.root.geometry('500x400')
# 初始化UI相关
self.initUI()
# 消息循环
self.root.mainloop()
# 初始化控件
def initUI(self):
root = self.root
if __name__ == "__main__":
messageBox = MsgBox()
接下来我们会将UI控件的示例编写在方法initUI中,为了查看方便,会分块展示:
Button
# text:按钮标题
# command: 事件绑定,当按钮被点击时,会执行
Button(self.root, text='按钮', command=self.BtnEvent).grid(row=0, column=0)
def BtnEvent(self):
print(u'您点击了按钮')
Checkbutton
self.chkVar = []
for i in range(4):
_str = 'CheckBtn' + str(i) # 标题
# 注意,此处不可编写为self.chkVar[i] = IntVar()
# 否则报错:IndexError: list assignment index out of range
self.chkVar.append(IntVar())
# text: 标题
# variable: 对象整型变量
# command: 关联事件
chkBtn = Checkbutton(self.root,text=_str,variable=self.chkVar[i],command=self.chkEvt)
chkBtn.grid(row=1, column=(i+1))
# 事件
def chkEvt(self):
for i in range(4):
# 获取选中状态,如果选中为1,否则为0
index = self.chkVar[i].get()
if index > 0:
print(u'你选择的按钮为:CheckBtn' + str(i))
Radiobutton
# 注意此处,可不用使用列表
self.radioVar = IntVar()
for i in range(1,4):
_str = 'RaidoBtn' + str(i)
# text: 标题
# variable: 对象的整型变量
# value: 获取选择对象的索引
radioBtn = Radiobutton(self.root,text=_str,variable=self.radioVar,value=i,command=self.radioEvt)
radioBtn.grid(row=2, column=(i+1))
def radioEvt(self):
index = self.radioVar.get()
print(u'你选择的radioButton的索引为:' + str(index))
Label
#Label文本
strContent = "这是标签控件,属性:bg设置背景颜色,fg设置文本颜色"
label = Label(self.root, text=strContent,bg='red',fg='blue',height=3)
label.grid(row=0, column=0)
Entry
def initUI(self):
#Entry
# 不可使用text属性来设定
en0 = Entry(self.root, text='请输入文本...',width=50, bg='red')
en0.grid(row=1, column=0, sticky='E')
# 使用StringVar()来绑定Entry,通过set来设定初始化值,通过get来获取,其输入值可改变
self.inputVar = StringVar()
self.inputVar.set('请输入内容....')
en1 = Entry(self.root, textvariable=self.inputVar, width=50,bg='yellow')
en1.grid(row=2, column=0, sticky='E')
Button(self.root, text='确认1', command=self.sureEvent1).grid(row=2, column=1)
# 密码输入框
self.inputVar2 = StringVar()
self.inputVar2.set('请输入密码')
en2 = Entry(self.root, textvariable=self.inputVar2, width=50,show='*')
en2.grid(row=3, column=0, sticky='E')
Button(self.root, text='确认2', command=self.sureEvent2).grid(row=3, column=1)
# 设置输入框属性
# 属性值有4个:normal(可写),disabled(不可操作), readonly(只读,不可操作),通过state来设定
self.inputVar3 = StringVar()
self.inputVar3.set('readonly')
en3 = Entry(self.root, textvariable=self.inputVar3, width=50,state='readonly')
en3.grid(row=4, column=0, sticky='E')
Button(self.root, text='确认3', command=self.sureEvent3).grid(row=4, column=1)
def sureEvent1(self):
inputStr = self.inputVar.get()
print(u'您的第二个输入框内容:' + inputStr)
def sureEvent2(self):
inputStr = self.inputVar2.get()
print(u'您的第三个输入框内容:' + inputStr)
def sureEvent3(self):
inputStr = self.inputVar3.get()
print(u'您的第四个输入框内容:' + inputStr)
来源:oschina
链接:https://my.oschina.net/u/4308799/blog/3657028