Tkinter初体验
一、基本步骤
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初体验的更多相关文章
- python窗体——pyqt初体验
连续两周留作业要写ftp的作业,从第一周就想实现一个窗体版本的,但是时间实在太短,qt零基础选手表示压力很大,幸好又延长了一周时间,所以也就有了今天这篇文章...只是为了介绍一些速成的方法,还有初学者 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
随机推荐
- SpringBoot中发送邮件服务
.转载:http://www.ityouknow.com/springboot/2017/05/06/spring-boot-mail.html 简单使用 1.pom 包配置 <dependen ...
- ElasticSearch1.7 java api
package cn.xdf.wlyy.solr.utils; import java.util.ArrayList;import java.util.HashMap;import java.util ...
- 1、pip不是内部运行程序 解决方法
一.方式一 1.切换到pip所在路径: shit+ 右键. 再此处打开运行窗口 2.执行 pip install pytest 脚本即可. 二.方式二,添加环境变量 1.将pip所在的文件路径 添加到 ...
- Java二级练习试题一
为保护本地主机,对Applet安全限制中正确的是() A. Applet可加载本地库或方法 B. Applet可读.写本地计算机的文件系统 C. Applet可向Applet之外的任何主机建立网络连接 ...
- 超全Altium Designer16 总结--Altium Designer
原址:http://blog.csdn.net/qq_29350001/article/details/52199356 以前是使用DXP2004来画图的,后来转行.想来已经有一年半的时间没有画过了. ...
- [CSP-S模拟测试]:attack(支配树+LCA+bitset)
题目传送门(内部题55) 输入格式 第一行,包含两个整数:$n,m,q$,表示敌军城市数.路数和情报数.接下来$m$行,每行包含两个整数:$u,v$,表示从$u$到$v$包含一条单向道路.接下来$q$ ...
- 【Java架构:持续交付】一篇文章搞掂:持续交付理论
一.持续集成.持续交付.DevOps概念,关系等 持续集成(Continuous integration/CI) 持续交付(Continuous delivery/CD) 持续部署() 持续 (Con ...
- yii2和laravel比较
yii2和laravel比较 一.总结 一句话总结: 开发速度两者相当:laravel的artisan工具和yii的gii有异曲同工的效果,借助于artisan工具,可以快速创建控制器.模型和路由等. ...
- Java JsonPath grab InvalidPathException in code, you must be catching Java 7's java.nio.file.InvalidPathException instead of JsonPath's com.jayway.jsonpath.InvalidPathExceptio
I am using JsonPath and am able to parse my data and get the values when the path provided is correc ...
- idea中git stash--解决pull冲突或切换分支问题
场景1:pull代码时提示冲突,本地代码和远程代码有冲突 场景2:当切换分支时,当前分支的代码又不想commit 这两种场景可以使用git stash来解决,将当前未commit的代码暂存起来. 操作 ...