Python Tkinter窗口化Ping小工具 (Windows/Liux)
Python 3.5的一个窗口化小工具,定时ping列表中的服务器。
程序启动配置的两种方式
- 预定义:下方代码去掉
iplist.update
的注释即可。
格式为iplist.update({“主机”:“注释”})
iplist = dict()
#iplist.update({"14.215.177.39":"百度ip"})
#iplist.update({"www.baidu.com":"百度"})
- 启动后输入:进入程序后输入地址*(没有地址注释功能)*,只需将所有
iplist.update
都注释掉即可。
程序界面
预定义带注释的界面
Windows界面 | Linux界面 (树莓派) |
---|---|
每行的格式为:地址注释 地址 [延迟(ms)]
#地址列表
iplist = dict()
iplist.update({"14.215.177.39":"百度ip"})
iplist.update({"www.baidu.com":"百度"})
非预定义的地址输入界面
每输入一行地址回车输入下一行,输入0结束输入。
背景颜色
状态 | 背景色 | [文字信息] |
---|---|---|
正常 | #7FFFAA | 延迟值 |
缓慢 | #FFD700 | 延迟值 |
一次Ping失败 | #FFD39B | X |
两次Ping失败 | #FF8C69 | XX |
三次及以上Ping失败 | #FF2222 | XXX |
示例:两次ping失败
依赖库 tkinter 安装
windows下Python3.2版本之后是自动安装tkinter。如需安装参考下方的连接
https://blog.csdn.net/qq_32005671/article/details/72903018 by:数据阿伯
最后贴上代码
import os
import sys
import platform
import tkinter as tk
"""窗口Ping工具by MaxMiku Feb 9th 2019适配Windows与linux可以选择预定义或者进入程序后再输入目标主机预定义只需将下方解除定义注释即可iplist.update({"主机":"注释"})
"""#地址列表
iplist = dict()
iplist.update({"14.215.177.39":"百度ip"})
iplist.update({"www.baidu.com":"百度"})#窗口宽度 若地址显示不全可以自定义
win_weight=200#========代码部分==========
#获取系统版本 区分指令
osver=sys.platform
print("Now system is %s"%osver)
if(osver.find("win",0,len(osver))!=-1):#winIswin=Trueping_comm='ping -n 1 -w 1 %s'line_head="来自 "delay_head=" 时间"delay_foot="ms "
else:#linuxIswin=Falseping_comm='ping -c 1 -w 1 %s'line_head="64 bytes from"delay_head=" time="delay_foot=" ms"#截取字符串
def getCenterText(source,head,end,includeHeadAndEnd=False,skip=0):"""includeHeadAndEnd 是否包含头尾 0假 1真skip 跳过次数 int"""pot_s=0#起始位置pot_e=0#终止位置len_soc=len(source)#长度result=""#结果count=skip#跳过计数pot_s=source.find(head,0,len_soc)+len(head)while(pot_s!=-1 & count>0):pot_s=source.find(head,pot_s+1,len_soc)+len(head)count=count-1if(pot_s!=-1):pot_e=source.find(end,pot_s+1,len_soc)if(pot_e!=-1):result=source[pot_s:pot_e]else:return ""else:return ""if(includeHeadAndEnd):return head+result+endelse:return resulttimeout_count=dict()
getin="0"
if(len(iplist)==0):getin=input("Please input the ip [1]:")
while(getin!="0"):iplist.update({"%s"%getin:""})getin=input("Please input the ip(0 to continue)["+str(len(iplist)+1)+"]:")win_heigh=0
num_ip=0
print("List: "+str(len(iplist)))
for ip in iplist:num_ip=num_ip+1print(str(num_ip)+" ==> "+str(ip))timeout_count.update({ip:0})if(Iswin):win_heigh=num_ip*42
else:win_heigh=num_ip*34def ping_host(ip):"""返回延迟 失败返回-1"""backinfo=os.popen(ping_comm%ip).read()# print(backinfo)#~ print(getCenterText(backinfo,"64 bytes from","\n",True))delay=getCenterText(getCenterText(backinfo,line_head,"\n",True),delay_head,delay_foot)if(Iswin):delay=delay[1::]if (delay!=""):#~ print("delay is %s"%delay)return float(delay)else:#~ print("Ping failed.")return -1.0window = tk.Tk()#创建窗口
window.wm_attributes('-topmost',1)#置顶
window.title('Ping!')
window.geometry('%sx%s'%(win_weight,win_heigh))#动态设置高度
txtLab=dict()#存放标签文本for ip in iplist:var = tk.StringVar() # 文字变量储存器label=tk.Label(window,textvariable=var,#~ bg='green', # 背景颜色font=('Arial', 12), # 字体和字体大小width=33, height=2 ) # 标签长宽)label.pack() # 固定窗口位置temp={"%s"%ip:var,"%sojb"%ip:label}txtLab.update(temp)for ip in iplist:a=txtLab.get(ip)a.set(ip)def pingit():global timeout_countfor ip in iplist:#尝试调用ret=ping_host(ip)if(ret==-1):tmp=timeout_count.get(ip)tmp=tmp+1timeout_count.update({ip:tmp})if(tmp>3):tmp=3a=txtLab.get(ip)a.set(iplist.get(ip)+" "+ip+" ["+"X"*tmp+"]")if(tmp==1):a=txtLab.get("%sojb"%ip)a.config(bg='#FFD39B')else:if(tmp==2):a=txtLab.get("%sojb"%ip)a.config(bg='#FF8C69')else:if(tmp==3):a=txtLab.get("%sojb"%ip)a.config(bg='#FF2222')#~ print(ip+" Failed to ping.")else:tmp=timeout_count.get(ip)if(tmp!=0):timeout_count.update({ip:0})a=txtLab.get(ip)if(Iswin):a.set(iplist.get(ip)+" "+ip+" [%.0f]"%ret)else:a.set(iplist.get(ip)+" "+ip+" [%.1f]"%ret)if(ret>250):a=txtLab.get("%sojb"%ip)a.config(bg='#FFD700')else:a=txtLab.get("%sojb"%ip)a.config(bg='#7FFFAA')#~ print(ip+" %.1f"%ret)#~ currentTime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))#~ Label1.config(text=currentTime)window.update()window.after(1000, pingit)
window.after(1000, pingit)window.mainloop()
Python Tkinter窗口化Ping小工具 (Windows/Liux)相关推荐
- Python: tkinter实例改名小工具
1 #!/usr/bin/env python 2 #coding=utf-8 3 # 4 # 版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126) 5 ...
- 【kimol君的无聊小发明】—用python写截屏小工具
[kimol君的无聊小发明]-用python写截屏小工具 前言 一.技术实现 1. 相关库 2. 定义窗口 3. 绘制工具条 4. 定义事件函数 二.后续改进 写在最后 前言 今天我看了一下自己的文件 ...
- Python——【自制搜索小工具】
哈喽,大家好丫,你们的小郭子又来啦 ~ 当自己电脑文件很多还有点乱,用电脑自带的搜索文件,效率有点低,憋担心,我们用Python自制一个搜索小工具就行了,嘻嘻嘻嘻 环境准备 解释器: Python 3 ...
- python英语翻译-python制作英语翻译小工具代码实例
这篇文章主要介绍了python制作英语翻译小工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用python爬虫可以制作英语翻译小工具.来 ...
- python点名代码_基于python tkinter的点名小程序功能的实例代码
基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...
- python制作一个桌面小工具
python实现一个桌面小工具,制作一个桌面的便签提醒工具 参考代码:https://github.com/cosven/memo 参考链接:https://www.jb51.net/article/ ...
- python剪刀石头布程序_使用Python Tkinter实现剪刀石头布小游戏功能
编写剪刀石头布游戏 让我们使用Python 3和Tkinter开发相同的游戏.我们可以将游戏命名为Rock-Paper-Scissors-Lizard-Spock. 规则和玩法 ock crushes ...
- python实现剪刀石头布_用Python Tkinter实现剪刀石头布小游戏的方法
用Python Tkinter实现剪刀石头布小游戏的方法 发布时间:2020-12-07 10:38:11 来源:亿速云 阅读:90 作者:小新 这篇文章将为大家详细讲解有关用Python Tkint ...
- 【DIY】FFmpeg Joiner – 多段视频「无损合并」小工具 [Windows]
http://subscribe.mail.10086.cn/subscribe/readAll.do?columnId=280&itemId=6082779 FFmpeg Joiner – ...
最新文章
- 重磅!2021泰晤士世界大学排名公布,清华排名首次挺进top20
- PE学习(一)masm32开发环境和ollyICE使用
- python pandas dataframe 转json_python-将嵌套的json转换为pandas dataframe
- python版本及ML库
- finalizer_Java Finalizer和Java文件输入/输出流
- Exchange 日志/存储路径
- 路飞学城-Python开发集训-第2章
- 如何退出while(cinvalue)的循环
- Ubuntu中使用dnw工具:没有找到/dev/secbulk0
- 芒果 TV Redis 服务解决方案
- 基于SSM实现的在线音乐网站【附源码】(毕设)
- 【总结】EJB开发过程中遇到的几个问题
- Origin绘图使用自定义的RGB配色
- matlab怎么创建数组对象,数组 – matlab初始化对象数组
- AP VLAN解决的问题
- 在计算机f有关快捷键,电脑快捷键大全
- C++学习历程及感受
- qq音乐网络异常获取音乐失败_QQ音乐怎么诊断网络异常
- 什么是ISO(国际标准化组织)?
- 钉钉这两年:陈航自我迭代 阿里社交进击
热门文章
- 深度学习试题_初学者入门宝典-机器学习入门资料汇总及学习建议(2018版)
- 拼音分词器多音字处理
- 魔法奇缘城堡油画Mac动态壁纸
- 微信小程序实现pdf、word等格式文件上传的方法
- 【前端页面】二手书籍交易平台-源代码及说明文档
- shell脚本实现查找文件夹下重复的文件,并提供删除功能
- eureka java_Eureka服务注册入门,服务启动
- 【熬夜猛肝万字博文】学妹问我怎么入门 Javascript,百般盘问下我终于决定贡献出自己的 JavaScript入门笔记(二)
- 将.qsv格式视频转为.mp4视频
- Metro UI风格配色方案