PyQt5开发入门到IP查询工具实现

news2024/11/28 10:52:23

1 基本介绍

1.1 简介

,QT 是最强大的 GUI 库之一,PyQt 是 Python 绑定 QT 应用的框架,是最强大和流行的跨平台 GUI 库之一。

PyQt 兼容所有流行的操作系统,包括 Windows、Linux 和 Mac OS。 它是双重许可的,可在 GPL 和商业许可下使用。新的稳定版本是 PyQt5,最新版本的 PyQt 可从其官网下载 − riverbankcomputing.com

PyQt API 是一组包含大量类和函数的模块:

QtCore − 其他模块使用的核心非 GUI 类

QtGui − 图形用户界面组件

QtMultimedia − 低级多媒体编程类

QtNetwork − 网络编程类

QtOpenGL − OpenGL 支持类

QtScript − 用于评估 Qt 脚本的类

QtSql − 使用 SQL 进行数据库集成的类

QtSvg − 显示 SVG 文件内容的类

QtWebKit − 用于呈现和编辑 HTML 的类

QtXml − 处理 XML 的类

QtWidgets − 用于创建经典桌面风格 UI 的类

QtDesigner − 用于扩展 Qt Designer 的类

1.2 安装

1)mac下安装

pip3 install PyQt5 -i https://pypi.douban.com/simple

 执行以下代码验证安装是否成功

代码如下:

import sys
from PyQt5.QtWidgets import QWidget, QApplication

app = QApplication(sys.argv)
widget = QWidget()
widget.resize(640, 480)
widget.setWindowTitle("Hello, PyQt5!")
widget.show()
sys.exit(app.exec())

2)安装QtTools(这个工具看需要安装,可以直接安装下面第三步的)

Qt Tools 包含:

  • 图形界面设计工具 Qt Designer,用于设计图形界面,生成 .ui文件,以 xml 格式存储界面和控件的属性;
  • UI 文件转换工具 PyUic,用于将 .ui 文件解析为 .py 文件的工具。

Qt Tools 可以使用 pip 方式安装:

pip3 install PyQt5-tools -i https://pypi.douban.com/simple

 3)VSCODE插件配置

找到Designer.app 

/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/qt5_applications/Qt

 配置一下启动脚本

 

将脚本复制到 Designer.app 同级目录下,并将其路径配置到编辑器中即可

可用性验证

 

 1.3 插件使用

1)创建new window

2)拖拽组件

 3)保存成gui文件

4)生成对应的 py 文件

  

 5)运行

添加下列代码

 6)继续修改

 7)每次更新都会覆盖,单独创建启动目录

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import Ui_tool

app = QtWidgets.QApplication(sys.argv)  # 实例化 QApplication 类,作为 GUI 主程序入口
MainWindow = QtWidgets.QMainWindow()    # 创建 MainWindow 类
ui = Ui_tool.Ui_MainWindow()                    # 实例 UI 类
ui.setupUi(MainWindow)                  # 设置窗体 UI
MainWindow.show()                       # 显示窗体
sys.exit(app.exec_())                   # 当窗口创建完成,需要结束主循环过程

2 基本开发

 

2.1 常用组件

2.1.1 QComboBox

1)常用方法列表

方法描述
addItem()添加一个下拉选项
addItems()从列表中添加下拉选项
clear()删除下拉选项集合中的所有选项
count()返回下拉选项集合中的数目
currentText()返回选中选项的文本
itemText(i)获取索引为i的item的选项文本
currentIndex()返回选中项的索引
setItemText(int index,text)更改指定索引的文本

2)常用信号(交互信息发送)

信号含义
Activated当用户选中一个下拉选项时发射该信号
currentIndexChanged当下拉选项的索引发生改变时发射该信号
highlighted当选中一个已经选中的下拉选项时,发射该信号

3)实例

 2.1.2 QComboBox

QLineEdit

  • QLineEdit是一个单行文本编辑控件;
  • QLineEdit相关的一个类是QTextEdit,它允许多行文字以及富文本编辑;

QTextEdit

  • QTextEdit可以显示多行、用来显示图像、列表和表格;

1)QLineEdit常用方法:

方法描述
text()取值
setText()赋值
setAlignment()根据对齐常量对齐文本
clear()删除内容
setMaxLength()设置输入的最大字符数
setReadOnly()使文本框不可编辑

setValidator()

验证校验,可以正则校验

2)QLineEdit常用信号:

信号含义

cursorPositionChanged()

每当光标移动触发

editingFinished()

当您按"Enter"或字段失去焦点时

returnPressed()

当你按下"Enter"

selectionChanged()

每当所选文本发生变化时

textChanged()

当框中的文本通过输入或编程方式更改时

textEdited()

每当编辑文本时

3)实例

 2.1.3 QPushButton

在 PyQt API 中,QPushButton 类对象提供了一个按钮,当单击该按钮时,可以对其进行编程以调用某个函数。

1)常用方法

方法描述

setCheckable()

如果设置为 true,则识别按钮的按下和释放状态

toggle()

在可检查状态之间切换

setIcon()

显示由图像文件的像素图形成的图标

setEnabled()

当设置为 false 时,按钮变为禁用状态,因此单击它不会发出信号

isChecked()

返回按钮的布尔状态

setDefault()

将按钮设置为默认值

2)实例

 2.1.4 QMenuBar、QMenu 和 QAction

QMenu 类提供了一个可以添加到菜单栏的小部件。 它还用于创建上下文菜单和弹出菜单。 每个 QMenu 对象可能包含一个或多个 QAction 对象或级联的 QMenu 对象。

      。。。。。。      
      bar = self.menuBar()
      file = bar.addMenu("File")
      file.addAction("New")
		
      save = QAction("Save",self)
      save.setShortcut("Ctrl+S")
      file.addAction(save)
		
      edit = file.addMenu("Edit")
      edit.addAction("copy")
      edit.addAction("paste")
		
      quit = QAction("Quit",self) 
      file.addAction(quit)
      file.triggered[QAction].connect(self.processtrigger)
      self.setLayout(layout)
      self.setWindowTitle("menu demo")
		
   def processtrigger(self,q):
      print q.text()+" is triggered"

2.1.5 其余常用组件

PyQt5 - 基本小部件

2.2 IP查询核心功能实现 

实现输入IP查询IP的所属信息,用于IP资产列表(excel)的维护

 1)windows.py

 2) 添加Ip和查询IP 

 3)excel操作

import xlrd,xlwt
from xlutils.copy import copy

def addIP(ip,describe):
    workbook = xlrd.open_workbook("ip.xlsx",encoding_override="utf-8")
    # 获取原表格第一个sheet的名字
    all_sheet = workbook.sheet_names()
    first_sheet = workbook.sheet_by_name(all_sheet[0])
    # 获取原表格第一个sheet一写入数据的行数
    rows = first_sheet.nrows
    # 拷贝新的excel,并从rows行开始追加写入
    new_workbook = copy(workbook)
    new_sheet = new_workbook.get_sheet(0)
        
    new_sheet.write(rows, 0, ip)
    new_sheet.write(rows, 1, describe)
 
    new_workbook.save("ip.xlsx")
    
def createExcel():
    testbook = xlwt.Workbook(encoding='utf-8')
    testbook.add_sheet('ip')
    testbook.save("ip.xlsx")

def findIP(ip):
    workbook = xlrd.open_workbook("ip.xlsx",encoding_override="utf-8")
    # 获取原表格第一个sheet的名字
    all_sheet = workbook.sheet_names()
    first_sheet = workbook.sheet_by_name(all_sheet[0])
    rows = first_sheet.nrows
    describe = "none"
    for i in range(rows):
        row = first_sheet.row_values(i)
        if ip in row[0]:
            describe = row[1]
    return describe

核心逻辑实现完成,可以完成基本查询需要 

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

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

相关文章

stm32f407单片机上通过HAL库实现can总线数据的收发

最近在使用can总线,由于这个以前接触的比较少,所以调试代码的时候直接是下载的正点原子的例程,在这个基础上修改调试的。现在将调试中遇到的问题,总结一下,避免以后踩坑。目前写了一个查询方式的,一个中断方…

Kubernetes第4天

第六章 Pod控制器详解 本章节主要介绍各种Pod控制器的详细使用。 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种p…

Nginx的原理

Nginx的原理 1、mater 和 worker2、worker 如何进行工作的3、一个 master 和多个 woker 有好处4、设置多少个 woker 合适5、连接数 worker_connection 1、mater 和 worker 2、worker 如何进行工作的 3、一个 master 和多个 woker 有好处 (1)可以使用 ng…

Kubernetes第5天

第七章 Service详解 本章节主要介绍kubernetes的流量负载组件:Service和Ingress。 Service介绍 ​ 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着…

【计算机网络详解】——数据链路层(学习笔记)

📖 前言:数据链路层提供了一种在不可靠的物理介质上传输数据的方式,并负责在网络层和物理层之间提供一个可靠的通信连接。本文将对数据链路层进行详细的介绍,包括数据链路层的定义、协议、功能和应用等方面。 目录 🕒 …

Jenkins持续集成之jenkins安装入门教学

Jenkins安装 1、下载jenkins;官方地址:https://www.jenkins.io/ 2、点击Download 3、下载windows版本的安装包后缀为msi; 4、双击安装;如下图 5、安装到指定的盘;再点击next 6、勾选第一个框;再点击next 7…

《Netty》从零开始学netty源码(五十八)之NioEventLoop.execute()

目录 NioEventLoop.execute()addTask()startThread()NioEventLoop.run()select()处理keys与执行任务processSelectedKeys()处理AbstractNioChannelselectAgain() runAllTasks()fetchFromScheduledTaskQueue()runAllTasksFrom()afterRunningAllTasks() 带截止时间的runAllTasks(…

国考省考行测:图形推理题1,2平移,旋转,翻转

国考省考行测:图形推理题1,2平移,旋转,翻转 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧&#xff…

[数据结构 -- C语言] 栈(Stack)

目录 1、栈 1.1 栈的概念及结构 2、栈的实现 2.1 接口 3、接口的实现 3.1 初始化 3.2 入栈/压栈 3.3 出栈 3.4 获取栈顶元素 3.5 获取栈中有效元素个数 3.6.1 bool 类型接口 3.6.2 int 类型接口 3.7 销毁栈 4、完整代码 5、功能测试 1、栈 1.1 栈的概念及结构 …

软件测试工程师简历要怎么写,才能让HR看到

作为软件测试的从业者,面试或者被面试都是常有的事。 可是不管怎样,和简历有着理不清的关系,面试官要通过简历了解面试者的基本信息、过往经历等。】、 如果你不知道软件测试简历怎么写,可以看看这个视频是怎么写的,…

ARM-底层/Day2

.text .global _start _start:mov r0,#9mov r1,#15bl cmp_funccmp_func:cmp r0,r1beq stop 相等则跳转结束 subhi r0,r0,r1subcc r1,r1,r0mov pc,lr 不相等则返回执行 stop: b stop .end 循环实现1~100之间的和 .text .global _start _start:mov r0,#0mov r1,#1bl sum_fun…

CCF-CSP 202104-1 灰度直方图

简单的一题&#xff0c;理解题意&#xff0c;使用哈希数组即可 #include<iostream>using namespace std;int L,n,m; int mapp[505][505]; int arr[300];int main(){cin>>n>>m>>L;for(int i0;i<n;i){for(int j0;j<m;j){cin>>mapp[i][j];arr…

C++之STL

一、六大组件&#xff1a; 容器&#xff1a; 各种数据结构&#xff0c;如vector、list、deque、set、map等,用来存放数据&#xff0c;从实现角度来看&#xff0c;STL容器是一种class template。 算法&#xff1a; 各种常用的算法&#xff0c;如sort、find、copy、for_each。…

你也可以成为营销策划大咖,只需掌握这些技巧

本人是从业营销策划行业近10年的老广告人&#xff0c;我说的话你可以选择相信。 千万不要看轻了广告策划这个职业的技术含量&#xff0c;不是说你语言文字能力比较好就一定能够适合这个行业。 想要进入这个行业的大公司&#xff0c;你如果是刚毕业的新人的话&#xff0c;首先…

Linux的使用

强制停止 ctrlc 停止程序的运行退出当前命令的输入 退出或登出 ctrld 退出账户的登录退出某些特定程序的专属页面不能用于退出vi/vim 历史命令搜索 查看历史输入过的命令 history可通过! 命令前缀&#xff0c;自动执行上一次匹配前缀的命令&#xff08;用于最近的2~3/4~5个…

SpringBoot中如何处理MySQL中存储的JSON数据?

目录 一、MySQL中如何保存JSON类型的数据 1.1 建表 1.2 保存一条带json的记录 1.3 查询 二、Springboot操作当前数据库表 2.1 方式一&#xff08;推荐&#xff09; 2.2 方式二 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式 。简洁…

Nginx安装及其常用命令(实操版)

Nginx安装及其常用命令&#xff08;实操版&#xff09; 一、安装Nginx1、准备工作2、开始进行 nginx 安装 二、Nginx常用命令三、nginx.conf配置文件1、位置2、配置文件中的内容&#xff08;包含三部分&#xff09; 四、Nginx 反向代理实例 21、实现效果2、准备工作 五、Nginx …

从萌芽到巨人: 揭秘Rod Johnson与Spring框架的故事

前言 在这个充满创意和技术追求的世界中&#xff0c;有一个名为 Spring 的框架&#xff0c;它孕育了无数创新和成功的故事。这是一个关于持续进化和超越自我的故事&#xff0c;一个激励人心的旅程&#xff0c;由一位富有远见的程序员和他的团队引领着。从最初的概念到如今的成熟…

【Vue3+TS项目】硅谷甄选day02--后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinstall来统一包管理工具。 1.1 环境准备 n…

存储系统及主存储器

存储器概述 分类 存储器的分类如下&#xff1a; 主存的分类&#xff1a; 主存分为随机存储器&#xff08;RAM&#xff09;和静态存储器&#xff08;RAM&#xff09;&#xff0c;随机存储器又分为静态RAM和动态RAM 存储器的层次结构 金字塔结构 主存-辅存及主存-缓存结构 …