一、基本步骤
1、导入Tkinter模块
2、创建根窗口
3、填充组件
4、组件关联逻辑
5、进入主循环

二、Code

 #coding:utf-8
'''
网关流量校验器
@author: Hongzm
'''
# 1导入Tkinter模块
from Tkinter import *
import tkMessageBox
class Tool(Frame): def __init__(self, master = None):
Frame.__init__(self, master)
# 标题
self.master.title("网关流量校验器")
# 窗体大小
self.master.geometry('400x200')
self.pack()
self.createWidgets()
self.retransBiasFactor = 0.03 def getConsume(self, flow):
intFlow = 0
try:
intFlow = int(flow)
except ValueError as e:
print("change ERROR:%s" % e)
return intFlow def setConsume(self):
if self.fileSize.get() == "":
self.flowConsume.set("")
else:
try:
temp = int(self.fileSize.get())
except ValueError as e:
tkMessageBox.showinfo('Message', "请输入正整数")
else:
temp = int(self.getTotalUsed(temp))
finally:
self.flowConsume.set(str(temp)) def setDevia(self):
if(self.flowConsume == "") and (self.ctccRecord.get() == ""):
self.deviation.set("")
else:
try:
gwValue = int(self.flowConsume.get())
ctccValue = int(self.ctccRecord.get())
except ValueError:
tkMessageBox.showinfo('Message', "网厅消耗请输入正整数")
else:
print(gwValue, ctccValue)
temp = 0
if(gwValue != 0):
temp = (ctccValue - gwValue)/float(gwValue)
else:
pass
finally:
self.deviation.set("%.2f%%" % (temp*100)) def getTotalUsed(self, dlFlow, ulFlow = 350):
return dlFlow # 4将组件command关联代码逻辑
def createWidgets(self):
# 网关流量消耗变量
self.flowConsume = StringVar()
# 流量偏差变量
self.deviation = StringVar() # 下载文件大小/Entry/Button
Label(self, text="下载文件大小:").grid(row=0, column=0)
self.fileSize = Entry(self)
self.fileSize.grid(row=0, column=1)
Button(self, text="获取实际消耗", command=self.setConsume).grid(row=0, column=3) # 网关流量消耗/Entry
Label(self, text="网关流量消耗").grid(row=1, column=0)
self.gwConsume = Entry(self, textvariable=self.flowConsume)
self.gwConsume.grid(row=1, column=1) # 网厅对应记录/Entry/Button
Label(self, text="网厅对应记录").grid(row=2, column=0)
self.ctccRecord = Entry(self)
self.ctccRecord.grid(row=2, column=1)
Button(self, text="计算流量偏差", command=self.setDevia).grid(row=2, column=3) # 流量偏差/Entry
Label(self, text="流量偏差").grid(row=3, column=0)
Entry(self, textvariable=self.deviation).grid(row=3, column=1) #添加单位B
for i in range(3):
Label(self, text="B").grid(row=i, column=2) self.Quit = Button(self, text="Quit", fg="red", command=root.destroy)
self.Quit.grid(row=4) if __name__ == '__main__':
# 2创建根窗口
root = Tk()
# 3在根窗口中创建所有组件,这里Tool类继承Frame类,这是所有组件(Widget)的父容器
app = Tool(master=root)
# 5进入主循环
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方向空白区域保留大小

最新文章

  1. CSS3的@keyframes用法详解:
  2. Qt qtextstream读取文件
  3. Word文档合并的一种实现
  4. html常用的综合体
  5. windows添加虚拟网卡
  6. [转载] 每周推荐阅读 BFQ:实现IO的隔离共享与高吞吐访问
  7. ef6 code first
  8. 初学AngularJS
  9. C# ashx与html的联合使用
  10. Android Task 相关
  11. saiku中多cube排序问题
  12. JDBC基本开发
  13. QT读取xml配置文件
  14. node-服务器
  15. React-记connect的几种写法
  16. 关于vmvawe的光驱,iso镜像,挂载,卸载
  17. SCSS 使用@each 方法循环遍历数组颜色并给li赋值
  18. linux批量修改文件中包含字符串的查找替换
  19. 读取Properties文件以及中文乱码问题
  20. Vue SSR配合Java的Javascript引擎j2v8实现服务端渲染1概述

热门文章

  1. oralce 日期 date 相关操作
  2. Codeforces Round #554 (Div. 2) C.Neko does Maths (gcd的运用)
  3. [BZOJ4316]小C的独立集 仙人掌?
  4. 真的,移动端尺寸自适应与dpr无关
  5. Arrays.asList()报错java.lang.UnsupportedOperationException
  6. 使用C#获取IP地址方法
  7. SDK与API的理解
  8. LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理
  9. SSM + MySQL批量删除操作
  10. jQuery 问题收集