更新内容:

1.添加entry栏默认ip和port口

2.修正退出功能

3.添加退出自动关闭窗口功能

4.优化cpu显示为固定保留两位小数

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>>文件: ps_client.py
>>作者: liu yang
>>邮箱: liuyang0001@outlook.com

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
from socket import *
from tkinter import *

class Ps_client():
    def __init__(self):
        self.ip=None
        self.port=None
        self.data=None
        # 创建ipv4套接字
        self.client=socket(AF_INET,SOCK_STREAM)
        self.root=Tk()
        self.root.geometry('300x300+250+250')

        # 创建IP输入框
        var_ip = StringVar()
        var_ip.set('localhost')
        self.et_ip=Entry(self.root,width=30,textvariable=var_ip)
        self.et_ip.pack()

        # 创建IP输入框的Label
        self.ip_lable=Label(self.root,text="ip地址")

        # 创建端口号输入框
        var_port = StringVar()
        var_port.set(66)
        self.et_port=Entry(self.root,width=30,textvariable=var_port)
        # 创建端口号Label
        self.port_lable=Label(self.root,text="端口号")

        # 创建连接按钮,注意!!!command=后面的连接的不加括号
        self.connButten=Button(self.root,text="连接",command=self.connect)
        # 创建获取按钮
        self.getCpuButten=Button(self.root,text="CPU",state='disable',command=self.get_cpu_info)
        # 创建断开按钮
        self.exitButten=Button(self.root,text="退出",state='disable',command=self.exit_connect)

        self.txtBox=Text(self.root,width=40,height=10)

    def main(self):
        self.et_ip.place(x=5,y=20)
        self.et_port.place(x=5,y=50)
        self.ip_lable.place(x=230,y=20)
        self.port_lable.place(x=230,y=50)
        self.connButten.place(x=5,y=80)
        self.getCpuButten.place(x=90,y=80)
        self.exitButten.place(x=180,y=80)
        self.txtBox.place(x=5,y=120)
        self.txtBox.insert(INSERT,'在这里显示内容')
        self.root.mainloop()

    def connect(self):
        self.ip=self.et_ip.get()
        try:
            self.port=int(self.et_port.get())
        except ValueError:
            self.txtBox.delete(0.0,END)
            self.txtBox.insert(0.0,"请输入合法的ip和端口...")
        else:
            print("ip:%s"%self.ip)
            print("port:%s"%self.port)
            self.txtBox.delete(0.0,END)
            self.txtBox.insert(0.0,"正在链接中...")
            try:
                self.client.connect((self.ip,self.port))
            except OSError:
                print("向一个无法连接的网络尝试了一个套接字操作")
                self.txtBox.delete(0.0, END)
                self.txtBox.insert(0.0, "%s:%d连接失败..."%(self.ip,self.port))
            else:
                print("%s连接成功..."%self.ip)
                self.txtBox.delete(0.0, END)
                self.txtBox.insert(0.0, "%s:%d连接成功..."%(self.ip,self.port))
                # 连接成功则将其他按钮变为可按状态
                self.exitButten['state']='active'
                self.getCpuButten['state']='active'

    def get_cpu_info(self):
        self.data='cpu'
        self.client.send(self.data.encode('utf-8'))
        # 将接受的数据装换成浮点数据
        cpu_used=float(self.client.recv(1024).decode('utf-8'))
        print('CPU使用率:%0.2f'%cpu_used+'%')
        self.txtBox.delete(0.0, END)
        # 字符串前加上r为防转义
        self.txtBox.insert(0.0, "当前的cpu使用率:%0.2f"%cpu_used+r"%")

    def exit_connect(self):
        self.client.close()
        self.txtBox.delete(0.0, END)
        self.txtBox.insert(0.0, "当前连接已断开...")
        print("当前连接已断开...")
        self.exitButten['state'] = 'disable'
        self.getCpuButten['state'] = 'disable'
        # 关闭当前窗口
        self.root.destroy()

if __name__ == '__main__':
    Ps=Ps_client()
    Ps.main()

[Python Study Notes]CS架构远程访问获取信息--Client端v1.0的更多相关文章

  1. [Python Study Notes]CS架构远程访问获取信息--Client端v2.0

    更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 效果图: '''''''''''''''''''''' ...

  2. [Python Study Notes]CS架构远程访问获取信息--SERVER端v2.0

    更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 ''''''''''''''''''''''''''' ...

  3. [Python Study Notes]CS架构远程访问获取信息--Client端

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  4. [Python Study Notes]CS架构远程访问获取信息--SERVER端

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  5. Eureka系列(三)获取服务Client端具体实现

    获取服务Client 端流程   我们先看下面这张图片,这张图片简单描述了下我们Client是如何获取到Server已续约实例信息的流程:  从图片中我们可以知晓大致流程就是Client会自己开启一个 ...

  6. [Python Study Notes]进程信息(丁丁软件监控进程,http-post)

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  7. [Python Study Notes]cpu信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  8. [Python Study Notes]电池信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. [Python Study Notes]内存信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

随机推荐

  1. Apache日志分析_shell命令行

    说明: 1.我的日志预先设定好按日生成文件:"CustomLog "|/opt/apache/bin/rotatelogs /opt/apache/logs/www.website ...

  2. 邓_php面试【003】——完整版

    php面试题汇总四(基础篇附答案) 1. 什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2. SESSION ...

  3. PostgreSql 分页limit

    摘录自:http://jingyan.baidu.com/article/a17d528538119b8098c8f2ca.html 语法: select * from persons limit   ...

  4. MyBatis动态传入表名,字段名参数的解决办法

    原文:http://blog.csdn.net/xichenguan/article/details/50393748 要实现动态传入表名.列名,需要做如下修改 添加属性statementType=& ...

  5. python3 第四章 - 输入与输出

    1.输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字. print('hello, world') 输入以上代码,执行后输出: hello, world 事实上,任何基本类型都可 ...

  6. Django_xadmin后台全局设置

    如何使用xadmin主题功能? 在ursersa app下的adminx.py文件下,注册一个基础设置类BaseSetting,并注册 import xadminfrom xadmin import ...

  7. iOS UImage 与 RGB 裸数据的相互转换

    iOS UImage 与 RGB 裸数据的相互转换 Touch the data of image in iOS Get data from a image 较简单,根据已有的 image 的属性,创 ...

  8. 流API--使用并行流

    这篇博客一起来研究下使用并行流.借组多核处理器并行执行代码可以显著提高性能,但是并行编程可能十分复杂且容易出错,流API提供的好处之一是能够轻松可靠的并行执行一些操作.请求并行处理流,首先要获得一个并 ...

  9. 【转】Linux方向职业分析

    引言: 据了解,Linux普通网络管理人员的月薪大约5000元左右,负责编程的Linux软件工程师月薪大约在8000元到12000元之间,Linux嵌入式软件开发人员的月薪大约在12000元以上. 影 ...

  10. Struts2中拦截器的使用与配置

    一,拦截器是什么? 拦截器是在Action执行之前和之后执行的代码,是一个类似于过滤器的类: 二,拦截器的作用 拦截器拦截Action的请求,在Action之前或之后实现某项功能: 三,拦截器的特点 ...