一、基本步骤
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方向空白区域保留大小

Tkinter初体验的更多相关文章

  1. python窗体——pyqt初体验

    连续两周留作业要写ftp的作业,从第一周就想实现一个窗体版本的,但是时间实在太短,qt零基础选手表示压力很大,幸好又延长了一周时间,所以也就有了今天这篇文章...只是为了介绍一些速成的方法,还有初学者 ...

  2. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  3. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  4. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  5. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  6. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  7. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  8. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  9. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

随机推荐

  1. excel条件格式 满足包含xx的整行高亮

    条件格式-->新建规则-->使用公式确定要设置格式的单元格   =COUNTIF($D4,"*_S_*")   =COUNTIF($D4,"*_M_*&quo ...

  2. condition简单示例

    在concurrent包中提供了condition接口,通过该接口可唤醒指定的某个线程,而不是采用随机唤醒的形式. import java.util.concurrent.locks.Conditio ...

  3. axios之前端发送get与post请求模板

    import axios from "axios"; 一.get mounted() { axios .get( "/api/queryusertree?domId=&q ...

  4. 如何使用Excel绘制甘特图

    摘自:http://www.mifengtd.cn/articles/how-to-create-a-gantt-chart-in-excel.html 再造<优秀的时间管理和项目管理工具> ...

  5. Matlab中利用null函数解齐次线性方程组

    摘自:http://blog.csdn.net/masibuaa/article/details/8119032 有齐次线性方程AX=0,且rank(A)=r<n时,该方程有无穷多个解, 可以用 ...

  6. Sublime Text 快捷键汇总

    1. 常用快捷键 Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)Ctrl+G 跳转到相应的行Ctrl+J 合并行(已选择需要合并的多行时)Ctrl+L 选择整行 ...

  7. spring-cloud:利用eureka实现服务提供与调用示例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCl ...

  8. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 GSM Base Station Identification (点在多边形内模板)

    In the Personal Communication Service systems such as GSM (Global System for Mobile Communications), ...

  9. ES6中类Class的super关键字

    super 关键字,既可以当作函数使用,也可以当作对象使用.在这两种情况下,它的用法完全不同. 1.super当做函数使用 super 作为函数调用时,代表父类的构造函数.ES6 要求,子类的构造函数 ...

  10. 【Java】遍历Map<String,String>

    Map<String, String> map = new HashMap<>(); map.put("key1", "value1") ...