python GUI(Tkinter)
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)