[白月黑羽]关于仿写类postman功能软件题目的解答

原题:
在这里插入图片描述
答:
python文件如下

from PySide6.QtWidgets import QApplication, QMessageBox,QTableWidgetItem,QHeaderView,QWidget,QTableWidget
from PySide6.QtCore import QEvent,QObject
from PySide6.QtUiTools import QUiLoader
import time
import requestsuiLoader = QUiLoader()class TableWidgetFilter(QObject):def __init__(self, parent=None):super(TableWidgetFilter, self).__init__(parent)def eventFilter(self, watched, event):if event.type() == QEvent.MouseButtonRelease:idx = watched.parentWidget().indexAt(event.position().toPoint())if(idx.row() < 0):watched.parentWidget().setCurrentItem(None)return super(TableWidgetFilter, self).eventFilter( watched, event)# 用于打印请求消息, 参数为 PreparedRequest 对象
def pretty_print_request(req):if req.body == None:msgBody = ''else:msgBody = req.body# 打印请求消息,如果为空不拼接进去result = '\n----------- 发送请求 -----------'if req.method!= None and req.url!= None:result = result + '\n' + req.method + ' ' + req.url if req.headers != None and len(req.headers) > 0:result = result +  '\n' result = result + str('\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()))if msgBody!= '':result = result + str('\n' + msgBody)return result# 用于打印响应消息
def pretty_print_response(res) -> str:result = '\n----------- 得到响应 -----------'if res.status_code!= None:result = result + str('\nHTTP/1.1 '+ str(res.status_code))if res.headers!= None and len(res.headers) > 0:result = result + '\n' result = result + str('\n'.join('{}: {}'.format(k, v) for k, v in res.headers.items()))if res.text!= '':result = result + str('\n' + res.text)return resultclass MainWindow:def __init__(self):self.ui = uiLoader.load('.\\main.ui')self.ui.addBtn.clicked.connect(self.add_header)self.ui.removeBtn.clicked.connect(self.remove_header)self.ui.headersTable.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)# 创建事件过滤器实例self.event_filter = TableWidgetFilter(self.ui.headersTable)self.ui.headersTable.viewport().installEventFilter(self.event_filter)self.ui.clearBtn.clicked.connect(self.clear_result)self.ui.sendBtn.clicked.connect(self.send)def add_header(self):self.ui.headersTable.insertRow(self.ui.headersTable.rowCount())def remove_header(self):row = self.ui.headersTable.currentRow()if row >= 0:self.ui.headersTable.removeRow(row)self.ui.headersTable.setCurrentItem(None)def send(self):#获取多个数据源request_type = self.ui.requestBox.currentText()request_url = self.ui.urlEdit.text()request_headers = {}for i in range(self.ui.headersTable.rowCount()):if self.ui.headersTable.item(i, 0) == None or self.ui.headersTable.item(i, 1) == None:continuekey = self.ui.headersTable.item(i, 0).text()value = self.ui.headersTable.item(i, 1).text()request_headers[key] = valuerequest_body = self.ui.bodyEdit.toPlainText()try:req = requests.Request(request_type, request_url, headers=request_headers, data=request_body)      prepared = req.prepare()except requests.exceptions.RequestException as e:QMessageBox.warning(self.ui, "错误", "请求参数错误\n" + str(e))returnself.ui.resultText.appendPlainText(pretty_print_request(prepared))#发送包try:res = requests.Session().send(prepared)self.ui.resultText.appendPlainText(pretty_print_response(res))except requests.exceptions.RequestException as e:QMessageBox.warning(self.ui, "错误", "请求失败\n" + str(e))returndef clear_result(self):self.ui.resultText.clear()app = QApplication([])
mainWindow = MainWindow()
mainWindow.ui.show()
app.exec()

动态加载的main.ui文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Form</class><widget class="QWidget" name="Form"><property name="geometry"><rect><x>0</x><y>0</y><width>534</width><height>519</height></rect></property><property name="windowTitle"><string>HTTP接口测试</string></property><layout class="QVBoxLayout" name="verticalLayout_3"><item><layout class="QVBoxLayout" name="verticalLayout_2"><item><layout class="QHBoxLayout" name="horizontalLayout"><item><widget class="QComboBox" name="requestBox"><item><property name="text"><string>GET</string></property></item><item><property name="text"><string>POST</string></property></item></widget></item><item><widget class="QLineEdit" name="urlEdit"/></item><item><widget class="QPushButton" name="sendBtn"><property name="text"><string>发送</string></property></widget></item></layout></item><item><widget class="Line" name="line"><property name="orientation"><enum>Qt::Horizontal</enum></property></widget></item><item><widget class="QSplitter" name="splitter_3"><property name="orientation"><enum>Qt::Horizontal</enum></property><widget class="QSplitter" name="splitter_2"><property name="orientation"><enum>Qt::Vertical</enum></property><widget class="QSplitter" name="splitter"><property name="orientation"><enum>Qt::Horizontal</enum></property><widget class="QLabel" name="label"><property name="font"><font><pointsize>12</pointsize></font></property><property name="layoutDirection"><enum>Qt::LeftToRight</enum></property><property name="text"><string>消息头</string></property><property name="alignment"><set>Qt::AlignCenter</set></property></widget><widget class="QPushButton" name="addBtn"><property name="sizePolicy"><sizepolicy hsizetype="Fixed" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>50</width><height>16777215</height></size></property><property name="text"><string>+</string></property></widget><widget class="QPushButton" name="removeBtn"><property name="sizePolicy"><sizepolicy hsizetype="Fixed" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>50</width><height>16777215</height></size></property><property name="text"><string>-</string></property></widget></widget><widget class="QTableWidget" name="headersTable"><column><property name="text"><string>名称</string></property></column><column><property name="text"><string></string></property></column></widget></widget><widget class="Line" name="line_2"><property name="minimumSize"><size><width>15</width><height>0</height></size></property><property name="orientation"><enum>Qt::Vertical</enum></property></widget><widget class="QWidget" name="layoutWidget_2"><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QLabel" name="label_2"><property name="font"><font><pointsize>12</pointsize></font></property><property name="text"><string>消息体</string></property><property name="alignment"><set>Qt::AlignCenter</set></property></widget></item><item><widget class="QPlainTextEdit" name="bodyEdit"><property name="enabled"><bool>true</bool></property></widget></item></layout></widget></widget></item><item><widget class="Line" name="line_3"><property name="orientation"><enum>Qt::Horizontal</enum></property></widget></item><item><widget class="QPlainTextEdit" name="resultText"><property name="readOnly"><bool>true</bool></property></widget></item><item alignment="Qt::AlignHCenter"><widget class="QPushButton" name="clearBtn"><property name="maximumSize"><size><width>75</width><height>16777215</height></size></property><property name="text"><string>清除</string></property></widget></item></layout></item></layout></widget><resources/><connections/>
</ui>

使用效果:
请添加图片描述

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

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

相关文章

零基础Java第十八期:图书管理系统

目录 一、package book 1.1. Book 1.2. BookList 二、package user 2.1. User 2.2. NormalUser与AdminiUser 三、Main 四、NormalUser与AdminiUser的菜单界面 五、package operation 5.1. 设计管理员菜单 六、业务逻辑 七、完整代码 今天博主来带大家实现一个…

系统架构师考试极限18天备考复盘(2024年11月)

前言 写下这篇复盘笔记的时候还没有出成绩。目前泽崽还是在读研究生&#xff0c;在经过 大概2周多个全日 的极限备考之后&#xff0c;于11月10日参加了软考的系统架构师考试&#xff08;高级&#xff09;。目前对于“基础知识-案例分析-论文”的估分预期大概是&#xff1a;55-…

Unity肢体控制(关节控制)

前面的基础搭建网上自己搜&#xff0c;我这个任务模型网上也有&#xff0c;可以去官网看看更多模型&#xff0c;这里只讲述有模型如何驱动肢体的操作方式 第一步&#xff1a;创建脚本 第二步&#xff1a;创建Rig Builder 建空容器 加部件&#xff08;Rig&#xff09;,加了之后…

用pandoc工具实现ipynb,md,word,pdf之间的转化

Pandoc 是一个强大的工具&#xff0c;可以实现多种文件格式之间的转换&#xff0c;包括 Jupyter Notebook (.ipynb)、Markdown (.md)、Word (.docx)、PDF 等格式。以下是具体的实现方法&#xff1a; 1. 安装 Pandoc 确保已安装 Pandoc&#xff1a; Linux: sudo apt install p…

二叉树遍历的非递归实现和复杂度分析

一&#xff0c;用栈实现二叉树先序遍历 1&#xff0c;原理 我用自己的口水话解释一下&#xff1a;准备一个栈&#xff0c;从根节点开始&#xff0c;先判断栈是否为空&#xff0c;如果否&#xff0c;就弹出一个元素&#xff0c;对弹出元素进行自定义处理&#xff0c;再将它的左…

【数据结构】什么是链栈?

在数据结构中&#xff0c;链栈&#xff08;Linked Stack&#xff09;是基于链表实现的一种栈结构&#xff0c;它在许多计算任务中有着广泛应用。对于初学者&#xff0c;理解链栈的概念、操作方式以及应用场景可以帮助我们更好地掌握数据结构的相关知识。在本篇文章中&#xff0…

Spring Boot编程训练系统:从概念到实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

redis序列化数据查询

可以看到是HashMap&#xff0c;那么是序列化的数据 那么我们来获得反序列化数据 import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; import redis.clients.jedis.Jedis;public class RedisDeserializeDemo {public static…

PostgreSQL物化视图详解

物化视图简介 物化视图的产生背景与概念 产生背景 随着数据库规模的增大和查询复杂性的提高&#xff0c;数据库查询的性能问题变得越来越突出。为了优化查询性能&#xff0c;数据库系统引入了物化视图&#xff08;Materialized View&#xff09;的概念。物化视图是一种预先计…

球差控制操作数【ZEMAX操作数】

在光学设计中&#xff0c;对于球差的控制是必要的&#xff0c;那么在zemax中如何控制球差的大小&#xff0c;理解球差&#xff0c;以及使用相应操作数控制球差&#xff1b; 在这篇中主要写如何使用zemax操作数去控制或者消除球差&#xff0c;对球差进行简单的描述&#xff0c;之…

使用 FastAPI 和 Tortoise ORM 构建高效的异步应用:完整指南

在现代 Web 开发中&#xff0c;选择合适的框架和工具对构建高效的应用至关重要。FastAPI 作为一个快速、现代的 Web 框架&#xff0c;以其异步特性和对 Python 类型提示的支持而备受欢迎。而 Tortoise ORM 则是一个适用于异步应用的轻量级 ORM&#xff0c;特别适合与 FastAPI 结…

学习threejs,使用TWEEN插件实现动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PLYLoader PLY模型加…

sql中in()方法查询参数过多处理小记

Springboot 多线程分批切割处理 大数据量List集合 &#xff0c;实用示例 Java使用多线程批次查询大量数据(Callable返回数据)方式 问题背景 业务要求对未完工的几十万甚至百万工单进行发短信提醒以及消息通知。所以每次查询需要将这海量数据查询出来。如果使用单线程&#xf…

前端 JS 实用操作总结

目录 1、重构解构 1、数组解构 2、对象解构 3、...展开 2、箭头函数 1、简写 2、this指向 3、没有arguments 4、普通函数this的指向 3、数组实用方法 1、map和filter 2、find 3、reduce 1、重构解构 1、数组解构 const arr ["唐僧", "孙悟空&quo…

传奇996_19——龙岭总结

功能&#xff1a; 切割 切割属性&#xff1a; 即人物属性&#xff0c;可以设置临时属性或者永久属性&#xff0c;龙岭使用的是临时属性&#xff0c;所谓临时就是存在有效期&#xff0c;龙岭设置的有效期是123456789秒&#xff0c;即1428.89802天。 龙岭写法&#xff08;倒叙…

从0开始学习--Day26--聚类算法

无监督学习(Unsupervised learning and introduction) 监督学习问题的样本 无监督学习样本 如图&#xff0c;可以看到两者的区别在于无监督学习的样本是没有标签的&#xff0c;换言之就是无监督学习不会赋予主观上的判断&#xff0c;需要算法自己去探寻区别&#xff0c;第二张…

pytest在conftest.py中实现用例执行失败进行截图并附到allure测试报告

conftest.py文件简介 conftest.py文件用于定义共享设置、夹具和钩子函数。 可以跨.py文件调用&#xff0c;有多个.py文件调用时&#xff0c;可让conftest.py只调用了一次fixture&#xff0c;或调用多次fixture&#xff1b; conftest.py与运行的用例要在同一个pakage下&#xf…

矩阵数组转置

#include<stdio.h> int main() {int arr1[3][4];//三行四列变成四行三列int arr2[4][3];for(int i0;i<3;i)//三行{for(int j0;j<4;j)//四列{scanf("%d",&arr1[i][j]);//录入}}for(int i0;i<3;i)//转置{for(int j0;j<4;j){arr2[j][i]arr1[i][j]…

GNN初探

测试了下网上找的一篇代码&#xff0c;运行成功~ # import sys # print(sys.path)import torch import torch.nn.functional as F from torch_geometric.nn import GCNConv from torch_geometric.datasets import Planetoid# 加载并预处理Cora数据集 dataset_path ./dataset/…

利用正则表达式批量修改文件名

首先&#xff0c; 我们需要稍微学习一下正则表达式的使用方式&#xff0c;可以看这里&#xff1a;Notepad正则表达式使用方法_notepad正则匹配-CSDN博客 经过初步学习之后&#xff0c;比较重要的内容我做如下转载&#xff1a; 元字符是正则表达式的基本构成单位&#xff0c;它们…