一、基本步骤
1、导入Tkinter模块
2、创建根窗口
3、填充组件
4、组件关联逻辑
5、进入主循环
二、Code
1 #coding:utf-8 2 ''' 3 网关流量校验器 4 @author: Hongzm 5 ''' 6 # 1导入Tkinter模块 7 from Tkinter import * 8 import tkMessageBox 9 class Tool(Frame): 10 11 def __init__(self, master = None): 12 Frame.__init__(self, master) 13 # 标题 14 self.master.title("网关流量校验器") 15 # 窗体大小 16 self.master.geometry('400x200') 17 self.pack() 18 self.createWidgets() 19 self.retransBiasFactor = 0.03 20 21 def getConsume(self, flow): 22 intFlow = 0 23 try: 24 intFlow = int(flow) 25 except ValueError as e: 26 print("change ERROR:%s" % e) 27 return intFlow 28 29 def setConsume(self): 30 if self.fileSize.get() == "": 31 self.flowConsume.set("") 32 else: 33 try: 34 temp = int(self.fileSize.get()) 35 except ValueError as e: 36 tkMessageBox.showinfo('Message', "请输入正整数") 37 else: 38 temp = int(self.getTotalUsed(temp)) 39 finally: 40 self.flowConsume.set(str(temp)) 41 42 def setDevia(self): 43 if(self.flowConsume == "") and (self.ctccRecord.get() == ""): 44 self.deviation.set("") 45 else: 46 try: 47 gwValue = int(self.flowConsume.get()) 48 ctccValue = int(self.ctccRecord.get()) 49 except ValueError: 50 tkMessageBox.showinfo('Message', "网厅消耗请输入正整数") 51 else: 52 print(gwValue, ctccValue) 53 temp = 0 54 if(gwValue != 0): 55 temp = (ctccValue - gwValue)/float(gwValue) 56 else: 57 pass 58 finally: 59 self.deviation.set("%.2f%%" % (temp*100)) 60 61 def getTotalUsed(self, dlFlow, ulFlow = 350): 62 return dlFlow 63 64 # 4将组件command关联代码逻辑 65 def createWidgets(self): 66 # 网关流量消耗变量 67 self.flowConsume = StringVar() 68 # 流量偏差变量 69 self.deviation = StringVar() 70 71 # 下载文件大小/Entry/Button 72 Label(self, text="下载文件大小:").grid(row=0, column=0) 73 self.fileSize = Entry(self) 74 self.fileSize.grid(row=0, column=1) 75 Button(self, text="获取实际消耗", command=self.setConsume).grid(row=0, column=3) 76 77 # 网关流量消耗/Entry 78 Label(self, text="网关流量消耗").grid(row=1, column=0) 79 self.gwConsume = Entry(self, textvariable=self.flowConsume) 80 self.gwConsume.grid(row=1, column=1) 81 82 # 网厅对应记录/Entry/Button 83 Label(self, text="网厅对应记录").grid(row=2, column=0) 84 self.ctccRecord = Entry(self) 85 self.ctccRecord.grid(row=2, column=1) 86 Button(self, text="计算流量偏差", command=self.setDevia).grid(row=2, column=3) 87 88 # 流量偏差/Entry 89 Label(self, text="流量偏差").grid(row=3, column=0) 90 Entry(self, textvariable=self.deviation).grid(row=3, column=1) 91 92 #添加单位B 93 for i in range(3): 94 Label(self, text="B").grid(row=i, column=2) 95 96 self.Quit = Button(self, text="Quit", fg="red", command=root.destroy) 97 self.Quit.grid(row=4) 98 99 if __name__ == '__main__': 100 # 2创建根窗口 101 root = Tk() 102 # 3在根窗口中创建所有组件,这里Tool类继承Frame类,这是所有组件(Widget)的父容器 103 app = Tool(master=root) 104 # 5进入主循环 105 app.mainloop()
三、主要组件
控件 描述
Button 按钮控件;在程序中显示按钮。
Canvas 画布控件;显示图形元素如线条或文本
Checkbutton 多选框控件;用于在程序中提供多项选择框
Entry 输入控件;用于显示简单的文本内容
Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label 标签控件;可以显示文本和位图
Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton 菜单按钮控件,由于显示菜单项。
Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message 消息控件;用来显示多行文本,与label比较类似
Radiobutton 单选按钮控件;显示一个单选的按钮状态
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text 文本控件;用于显示多行文本
Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox 用于显示你应用程序的消息框。
四、布局
Pack采用块的方式组织配件,默认从上而下放置。
基本用法是:Widget.pack(side="top")或者Widget.pack(side=TOP)
Grid是网格式布局
基本用法是:Widget.grid(row=0, column=1)
主要参数:
row:控制放置的行数,从0开始算起,默认为上一个位占领的行数
column:控件放置位置的列数,从0开始算起,默认为0
rowspan:设置单元格横向跨越的行数
columnspan:设置单元格纵向跨越列数
ipadx:设置控件里面x方向空白区域大小
ipady:设置控件里面y方向空白区域大小
padx:设置控件周围x方向空白区域保留大小
pady:设置控件周围y方向空白区域保留大小