一款IP合并和分解工具(二)

news2024/11/16 9:32:35

        本文是对上一篇文章的补充,看过《一款IP合并和分解工具(一)》的知道,cidr-merger工具在windows上使用需要用命令行,不是很方便,在这通过python的tkinter进行二次开发,写一个可视化的界面

目录

一:界面概览

二:可视化布局

三:功能实现

1,界面布局实现

2,IP合并分解实现

3,功能展示

四:总结


一:界面概览

 可视化工具里用到的组件有:PanedWindow,Frame,Label,Radiobutton,Scrollbar,Button

二:可视化布局

        本次界面的布局用到的就是PanedWindow组件,称之为面板组件,这个组件类似于Frame和LabelFrame组件,是容器组件,是可以在此组件内收纳其它组件为自己的子组件,但是跟Frame和LabelFrame组件它可以用鼠标调整面板的大小,可以调节面板的边界。PanedWindow组件的作用是把一个窗体分割成几个部分,这几个部分可以自己调整其大小。

        PanedWindow组件的创建语法和相关参数,及方法如下:

background 或 bg

组件的背景颜色

borderwidth 或bd

组件边框宽度

cursor

组件上的鼠标光标样式

handlesize

分割线上的手柄尺寸,默认是8像素

height

组件高度

opaqueresize

默认为True,组件尺寸随鼠标拖曳而改变,为False,则组件尺寸在鼠标释放时才会更新。

orient

分割方式,HORIZONTAL横向,VERTICAL纵向

relief

组件边框样式

sashpad

设置分割线到窗格间的间距

sashrelief

分割线的样式

sashwidth

分割线的宽度

showhandle

设置是否显示手柄,默认为False不显示

width

组件的宽度

方法:

    add(组件,参数) 

本次工具布局设计是:

1,四层横向切割,第一层是功能选择,第二层是提示输入输出,第三层是结果展示,第四层是功能按钮

2,第二层和第三层又分别做了纵向切割,来区分输入输出

在这里先举一个例子,大家看起来更直观

from tkinter import *
 
root=Tk() # 源码来自 wb86.com
 
pw1=PanedWindow(root,orient=VERTICAL,bg='red') # 创建纵向分割面板,背景红色
pw1.pack(fill=BOTH,expand=True) # 尺寸跟随窗体一起变化
 
la1=Label(pw1,text='111111',bg='lightblue') # 标签父组件为pw1
la2=Label(pw1,text='222222',bg='lightgreen') # 标签父组件为pw1
 
pw1.add(la1) # 加入标签1
pw1.add(la2) # 加入标签2
 
pw2=PanedWindow(pw1,orient=HORIZONTAL,bg='blue',bd=4) 
# 创建横向分割面板,背景蓝色,父组件为pw1,边框宽度为4
la3=Label(pw2,text='333333',bg='yellow') # 标签父组件为pw2
la4=Label(pw2,text='444444',bg='orange') # 标签父组件为pw2
 
pw1.add(pw2) # pw2加入到pw1
pw2.add(la3) # pw2加入标签3
pw2.add(la4) # pw2加入标签4
 
root.mainloop()

 运行结果

三:功能实现

1,界面布局实现

创建三个PanedWindow实例,一个横向,两个纵向

self.funcSelectLayout = PanedWindow(root,orient=VERTICAL,sashrelief='groove') # 创建纵向分割面板, showhandle=True
self.funcSelectLayout.pack(fill=BOTH,expand=True) # 尺寸跟随窗体一起变化

self.inputOutputTextLayout = PanedWindow(self.funcSelectLayout,orient=HORIZONTAL,sashrelief='groove')
self.inputOutputTextLayout.pack(fill=BOTH,expand=True)

self.inputOutputLayout      = PanedWindow(self.funcSelectLayout,orient=HORIZONTAL,sashrelief='groove')  # 创建横向分割面板,父组件为funcSelectLayout
self.inputOutputLayout.pack(fill=BOTH,expand=True)

创建Radiobutton按钮,Label标签,Text带滚动条的实现部分在此就不一一展现了,这些在我的博客Python专栏里都有写到

将上述创建好的组件加到PanedWindow面板中去

self.funcSelectLayout.add(self.funcSelectFrame,minsize=50)
self.funcSelectLayout.add(self.inputOutputTextLayout,minsize=20)
self.funcSelectLayout.add(self.inputOutputLayout,minsize=480)

self.inputOutputTextLayout.add(self.inputLabel)
self.inputOutputTextLayout.add(self.outpuLabel)

self.inputOutputLayout.add(inputFrame)
self.inputOutputLayout.add(outputFrame)

self.funcSelectLayout.add(startButton,minsize=50)

2,IP合并分解实现

这一步我们要实现的是通过python去调用命令行并且得到命令行的输出,将得到的输出展现到界面上,这需要用到os模块的popen模块

os.popen带返回值的,如何获取返回值

       returnInfo = os.popen(cmd)

然后再通过read() 方法得到字符串结果

    def ipMerge(self):
        input = self.inputText.get("1.0",END)#其中第一个参数‘1.0’是指从第一行第1列进行读取
        with open('input.txt','w') as f:
            f.write(input)
        returnTxt = os.popen('type input.txt | cidr-merger-windows-amd64.exe -r').read()

        self.outpuText.delete("1.0",END)
        self.outpuText.insert(INSERT,returnTxt)

    def ipSeparate(self):
        input = self.inputText.get("1.0",END)#其中第一个参数‘1.0’是指从第一行第1列进行读取
        with open('input.txt','w') as f:
            f.write(input)
        returnTxt = os.popen('type input.txt | cidr-merger-windows-amd64.exe -s').read()
        self.outpuText.delete("1.0",END)
        self.outpuText.insert(INSERT,returnTxt)

最后调用Text组件的insert方法来将命令行的输出展示到界面上

3,功能展示

 

四:总结

        上述的功能实现没有给出全部的源码,有不懂的同学可以私信,其实关键部分文章里都已经讲到了,具体到各个组件的实现大家可以自行去学习,很多技能都是通过摸索才能真正的掌握。本文就介绍到次,谢谢大家的浏览。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2bit反射型超表面设计

1.单patch扫参 1)确定单元周期(最好0.3波长到0.5波长) 2)确定介质介电常数。(小一点比较好,带比较宽,一般选F4B2.65) 3)确定介质板厚度。厚一点好,最大3mm&a…

乱七八糟随便记录

建立Statement对象的作用是? 正确答案: C 你的答案: C (正确) A.连接数据库 B.声明数据库 C.执行SQL语句 D.保存查询结果 解释: 1、Statement对象用于执行不带参数的简单SQL语句。 2、Prepared Statement 对象用于执行预编译SQL语句。 3、Callable Sta…

react总结

一、React 入门 1.1 特点 高性能、声明式、组件化、单向响应的数据流、JSX扩展、灵活 1.2 React初体验 <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&quo…

软件测试缺陷

缺陷的定义 产品的定义不满足用户需求测试执行时&#xff0c;实际结果与预期结果不一致 缺陷产生的根本原因 需求变更沟通不畅&#xff0c;信息不同步软件复杂进度压力需求文档存在错误非根本设计存在错误非根本 缺陷的基本要素 ID编号&#xff1a;唯一模块&#xff1a;根据…

THREEJS 地图可视化案例分享

效果预览 git代码地址 threejs_map: threejs 地图可视化案例

能说会画 VisCPM:SOTA 开源中文多模态大模型

最近&#xff0c; 清华大学 NLP实验室、面壁智能、知乎联合在 OpenBMB 开源多模态大模型系列VisCPM &#xff0c;评测显示&#xff0c; VisCPM 在中文多模态开源模型中达到最佳水平。 VisCPM 是一个开源的多模态大模型系列&#xff0c;支持中英双语的多模态对话能力&#xff08…

全志科技T3国产工业核心板规格书(四核ARM Cortex-A7,主频1.2GHz)

1 核心板简介 创龙科技SOM-TLT3是一款基于全志科技T3处理器设计的4核ARM Cortex-A7国产工业核心板&#xff0c;每核主频高达1.2GHz。 核心板通过邮票孔连接方式引出CSI、TVIN、MIPI DSI、TVOUT、RGB DISPLAY、LVDS DISPLAY、GMAC、EMAC、USB、SATA、SDIO、UART、TSC、SPI、TW…

《PyTorch深度学习实践》第十讲 卷积神经网络(基础篇 + 高级篇)

b站刘二大人《PyTorch深度学习实践》课程第十讲卷积神经网络&#xff08;基础篇 高级篇&#xff09;笔记与代码&#xff1a; https://www.bilibili.com/video/BV1Y7411d7Ys?p10&vd_sourceb17f113d28933824d753a0915d5e3a90 https://www.bilibili.com/video/BV1Y7411d7Ys?…

数据结构--特殊矩阵的压缩存储

数据结构–特殊矩阵的压缩存储 一维数组的存储结构 ElemType a[10]; //ElemType型一维数组各数组元素大小相同&#xff0c;且物理上连续存放。 数组元素a[i]的存放地址 LOC i * sizeof(ElemType) ( 0 ≤ i < 10 ) (0\le i < 10) (0≤i<10) 注:除非题目特别说明&…

Win10不香了吗?微软 Win11 份额涨至 35.75% 创新高

根据 Valve 公司的最新调查结果&#xff0c;Windows 11 在 Steam 平台上的用户数量正稳步增长&#xff0c;预计将超过36%的比例。Steam定期进行用户软硬件情况调查&#xff0c;旨在提供可靠的数据支持供公司和游戏开发者用于未来的决策制定。此调查选择参与用户的方式是随机的&…

树莓派学习笔记12-安装使用PyZbar

树莓派学习笔记12-安装使用PyZbar 前言 通过树莓派外接USB摄像头&#xff0c;实现条形码的识别&#xff0c;并串口&#xff08;USB串口&#xff09;打印条形码的内容。 前期准备 硬件&#xff1a;树莓派4B 系统&#xff1a;Raspios-2021-03-04 编译器&#xff1a;Thonny 视…

如何基于GeoToolKit/INT实现矢量流线的聚集动画效果示例

继续在上一篇文章的基础上&#xff0c;利用相同的数据处理方法统一了不同年代地层的数据格式&#xff08;目前js解析支持的格式有ZMap、TS、XYZ和XYZA等&#xff09;&#xff0c;本文主要基于GeoToolKit/INT组件&#xff0c;针对地质研究经常在二维等值线基础上模拟计算地层中物…

【C++3】crontab,ftp

文章目录 1.生成数据&#xff1a;crontab2.ftp&#xff1a;ftp是tcp/ip协议族中一员&#xff0c;分客户端和服务端2.1 安装&#xff1a;linux操作系统的用户也是ftp的用户&#xff0c;可以配置专用的ftp用户&#xff0c;专用的ftp用户只能用于ftp&#xff0c;不能登录操作系统2…

ROS2移动机器人导航仿真

环境&#xff1a;Ubuntu 18.04 ros2 eloquent wget http://fishros.com/install -O fishros && . fishros1.安装turtlebot3相关功能包 sudo apt install ros-eloquent-turtlebot3* ref&#xff1a; https://docs.ros.org/ ROS2导航SLAM建图探索_鱼香ROS的博客-CSD…

蛋白组学 代谢组

https://www.cnblogs.com/yanzhi123/p/11712926.htmlhttps://www.cnblogs.com/yanzhi123/p/11712926.html【3】蛋白质组学鉴定软件之Mascot - 简书 (jianshu.com) 【6】蛋白质组学鉴定定量软件之MaxQuant - 简书 (jianshu.com) 基于Maxquant软件处理的LabelFree蛋白质组学 首…

图灵第4期MySQL调优专题学习笔记

目录 一、首先复习打印的课件 二、Explain中的列 三、解读extra 四、索引最佳实践 五、MySQL的内部组结构 2. bin-log归档&#xff1a; 六、常见SQL深入优化 1. order by 与 group by 优化 2. 索引设计原则 3. 分页查询优化&#xff08;根据非主键字段排序的分页查询…

Verilog基础之十三、ROM实现

目录 一、前言 二、非IP核设计 2.1 工程设计文件读取初始化 2.2 测试代码 2.3 仿真结果 三、IP核创建ROM 3.1 IP核生成ROM 3.2 设计代码 3.3 测试代码 3.4 仿真结果 四、modelsim设置 4.1 模拟信号显示 4.2 信号范围显示设置 五、数据文件 一、前言 对于工程中的…

IMX6ULL系统移植篇-uboot启动Log信息

一. 进入uboot 命令模式 只有启动 uboot&#xff0c;进入 uboot的命令行模式时&#xff0c;才能使用 uboot 的命令。 当开发板启动时&#xff0c;快速按下回车键即可进入 uboot命令行模式。这时&#xff0c;进入 uboot 的命令行模式以后输入“help” 或者 “&#xff1f;” &a…

基因遗传进化算法-找最优路径

import random import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"]["SimHei"] #设置字体 plt.rcParams["axes.unicode_minus"]False #该语句解决图像中的“-”负号的乱码问题# 创建初始种群 def create_initial_population():popu…

1024天,CSDN上的时间之旅

1024天&#xff0c;CSDN上的时间之旅 感想收获未来规划职业规划创作规划 感想 今天是在CSDN这个博客上成为博主已经迈入了1024天。这个数字对于计算机领域来说&#xff0c;具有特殊的含义和重要性。 在计算机科学中&#xff0c;1024是2的十次方&#xff0c;也就是2^10。这意味…