提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 目录

    文章目录

    前言

    一、.egg横向库文件使用方式

    1.通过安装横向库使用

    2、添加系统环境变量使用

    二、工具背景颜色或者背景图片设置

    1.设置背景颜色

    2.设置背景图片

    3、工具控件样式修改

    三、输入框限制

    四、工具日志显示

    五、通过device_listWidget控件实现设备管理

    1、设备信息保存,通过json文件保存相关设备信息

    2、device_listWidget显示设备控制

    3、获取设备勾选列表

    4、添加或者删除设备

    5、设备列表颜色修改

    6、文件或者文件夹选择

    7、IP正确判断和ping

    六、工具界面配置保存和展示

    七、创建右键菜单

    总结



前言

作为测试工程师,在使用python+pyqt开发小工具过程中,总结一些常用经验

文章UI文件   界面功能代码下载


提示:以下是本篇文章正文内容,下面案例可供参考

一、.egg横向库文件使用方式

1.通过安装横向库使用

本地安装easy_install XXX.egg

缺点:横向库通常是会有更新的,安装的方式在更新时较为麻烦

2、添加系统环境变量使用

filename = os.path.dirname((os.path.abspath(__file__)))  # 获取当前路径
sys.path.append(filename)
sys.path.append(filename + '\pkgs\xx.egg')  # 将egg文件添加到系统环境变量

二、工具背景颜色或者背景图片设置

1.设置背景颜色

from PyQt5.QtGui import *palette = QPalette()
palette.setColor(self.backgroundRole(), QColor(212, 212, 212))
self.setPalette(palette)

2.设置背景图片

    def paintEvent(self, event):all_name = os.listdir('./pic/')if 'background.jpg' in all_name:  # 如果图片不存在,会导致背景黑色painter = QPainter(self)pixmap = QPixmap('./pic/background.jpg')  ## ""中输入图片路径# 绘制窗口背景,平铺到整个窗口,随着窗口改变而改变painter.drawPixmap(self.rect(), pixmap)

3、工具控件样式修改

可以通过QTdesigner设置stylesheet进行工具样式修改(需要CSS相关基础)

三、输入框限制

    def input_limit(self):'''限制某些输入框的允许输入字符'''reg1 = QRegExp("[0-9,]+$")pValidator1 = QRegExpValidator(reg1)  # 只允许输入数字和英文逗号reg3 = QRegExp("[0-9]+$")pValidator3 = QRegExpValidator(reg3)  # 只允许输入数字self.lineEdit_2.setValidator(pValidator1)self.lineEdit_23.setValidator(pValidator3)self.lineEdit_31.setValidator(pValidator3)self.lineEdit_32.setValidator(pValidator3)

四、工具日志显示

通过textEdit进行日志展示,下面方法可以通过入参数控制日志显示颜色、加载PC时间。

扩展:可以增加日志等级参数,控制显示日志内容

    def log_text_show(self, text, colour='black', time_enable=True):'''日志显示和记录text:日志内容colour:行字体颜色,默认黑色,可设置(black、red、green)time_enable:是否打印PC时间'''if text != '' and text != '\n':if '\n' in text:text_list = text.split('\n')else:text_list = [text]for text_info in text_list:if time_enable:now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')txt1 = now_time + ': ' + text_infoelse:txt1 = text_infoif colour == 'black':txt = "<font color=\"#000000\">%s</font> " % txt1elif colour == 'red':txt = "<font color=\"#ff0000\">%s</font> " % txt1elif colour == 'green':txt = "<font color=\"#00aa00\">%s</font> " % txt1else:txt = "<font color=\"#000000\">%s</font> " % txt1self.textEdit_10.append(txt)  # 界面显示self.write_log.write_txt(txt1)  # log记录else:self.textEdit_10.append(text)  # 界面显示self.write_log.write_txt(text)  # log记录QApplication.processEvents()  # 实时刷新

五、通过device_listWidget控件实现设备管理

1、设备信息保存,通过json文件保存相关设备信息

2、device_listWidget显示设备控制

    def QListWidget_show(self, checked_list=[]):'''从配置文件中读取设备信息列表展示checked_list:设备勾选'''try:with open('./config/sut_info.json') as fp:sut_info_dict = json.load(fp, strict=False)ip_list = sut_info_dict['IP_list']self.device_listWidget.clear()for i in range(0, len(ip_list)):item = QtWidgets.QListWidgetItem()item.setText(ip_list[i])if checked_list:if ip_list[i] in checked_list:item.setCheckState(QtCore.Qt.Checked)else:item.setCheckState(QtCore.Qt.Unchecked)else:item.setCheckState(QtCore.Qt.Unchecked)self.device_listWidget.addItem(item)except:self.device_listWidget.clear()

3、获取设备勾选列表

    def get_check_status(self):'''获取设备勾选列表'''checked_list = []for index in range(self.device_listWidget.count()):item = self.device_listWidget.item(index)if item.checkState():checked_list.append(item.text())return checked_list

4、添加或者删除设备

    def add_sut(self, ip):'''添加设备'''item = QtWidgets.QListWidgetItem()item.setText(ip)item.setCheckState(QtCore.Qt.Unchecked)self.device_listWidget.addItem(item)def del_sut(self, show_QMessageBox=True):'''删除设备'''if show_QMessageBox:replay = QMessageBox.question(self, "确认", "是否删除设备?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)else:replay = QMessageBox.Yesif replay == QMessageBox.Yes:sut_list = self.get_check_status()if sut_list:with open('./config/sut_info.json') as fp: sut_info_dict = json.load(fp, strict=False)print(self.device_listWidget.count())numbers = list(range(0, self.device_listWidget.count()))numbers = list(reversed(numbers))  # 需要从最后的开始判断删除print(numbers)for index in numbers:item = self.device_listWidget.item(index)if item.text() in sut_list:self.device_listWidget.takeItem(index)sut_info_dict['IP_list'].remove(item.text())del sut_info_dict[item.text()]del itemsut_info_json = json.dumps(sut_info_dict)self.opera_json.write_data('./config/sut_info.json', sut_info_json)else:pass

5、设备列表颜色修改

可以通过设置当前设备IP颜色,表示设备测试状态

    def set_items_Foregrounds(self, name='all', color='black'):'''设置设备列表字体颜色,用于显示成功失败(绿色成功,红色失败,黑色未测试)'''brush = QBrush(QColor(0, 0, 0))if color == 'black':brush = QBrush(QColor(0, 0, 0))if color == 'red':brush = QBrush(QColor(170, 0, 0))if color == 'green':brush = QBrush(QColor(0, 170, 0))for index in range(self.device_listWidget.count()):item = self.device_listWidget.item(index)if name == 'all':item.setForeground(brush)else:if item.text() == name:item.setForeground(brush)QApplication.processEvents()  # 实时刷新

6、文件或者文件夹选择

    def file1_open(self):'''升级文件1选择按钮'''try:filename = self.lineEdit_34.text()fname = QFileDialog.getOpenFileName(self, "Open file", filename, filter="xls Files(*.bin)")  # 选择bin文件except:fname = QFileDialog.getOpenFileName(self, "Open file", "/home", filter="xls Files(*.bin)")  # 选择bin文件if fname:if fname[0]:self.lineEdit_34.setText(fname[0])def face_file_open(self):'''文件夹选择按钮'''try:filename = self.lineEdit_13.text()fname = QFileDialog.getExistingDirectory(self, "请选择文件夹", filename)except:fname = QFileDialog.getExistingDirectory(self, "请选择文件夹", "/home")if fname:self.lineEdit_13.setText(fname)

7、IP正确判断和ping

subprocess.Popen需要黑框输出;subprocess.call可以不需要黑框

    def isIP(self, str):'''判断字符串是否为IP地址'''p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')if p.match(str):return Trueelse:return Falsedef check_ip_online(self, ip):'''检测某个IP是否在线'''result = subprocess.call('ping -w 1000 -n 1 %s' % ip, shell=True)  # ,stdout=subprocess.PIPEif result == 0:return Trueelse:return False

六、工具界面配置保存和展示

通过json文件保存界面配置,并在__init__中展示上次保存的界面数据

    def save_UI_config(self):'''保存页面配置'''self.get_sheet1_UI_info()self.get_sheet2_UI_info()self.get_sheet3_UI_info()self.get_sheet4_UI_info()try:with open('./config/UI_info.json') as fp:ui_info_dict = json.load(fp, strict=False)except:ui_info_dict = {}ui_info_dict['domain'] = gloVar.domain'''gloVar用于保存所以全局临时变量'''ui_info_json = json.dumps(ui_info_dict)self.opera_json.write_data('./config/UI_info.json', ui_info_json)def closeEvent(self, event):"""重写closeEvent方法,实现关闭窗口保存界面配置"""self.save_UI_config()def last_show(self):'''上次数据展示'''try:with open('./config/UI_info.json') as fp:ui_info_dict = json.load(fp, strict=False)self.lineEdit_21.setText(ui_info_dict['domain']['domain_user'])except:pass

七、创建右键菜单

        self.device_listWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)  # 为设备列表增加右键菜单self.device_listWidget.customContextMenuRequested[QtCore.QPoint].connect(self.device_listWidget_Context)def device_listWidget_Context(self):'''设备列表右键菜单'''popMenu = QtWidgets.QMenu()# add_sut = QtWidgets.QAction(u"添加", self)  # 添加页面设置任务栏# add_sut.setShortcut('Ctrl+A')  # 设置快捷键# popMenu.addAction(add_sut)popMenu.addAction(QtWidgets.QAction(u'添加', self))popMenu.addAction(QtWidgets.QAction(u'排序', self))popMenu.addAction(QtWidgets.QAction(u'清空', self))popMenu.triggered[QtWidgets.QAction].connect(self.processtrigger)popMenu.exec_(QCursor.pos())def processtrigger(self, q):if q.text() == "添加":self.sut_info_ui_show()if q.text() == "排序":self.button_sort_IP()if q.text() == "清空":replay = QMessageBox.question(self, "确认", "确认清空设备列表?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)if replay == QMessageBox.Yes:for index in range(self.device_listWidget.count()):item = self.device_listWidget.item(index)item.setCheckState(QtCore.Qt.Checked)self.del_sut(show_QMessageBox=False)

总结

未完待续

python_PYQT5工具开发常用知识点(一)相关推荐

  1. 底层开发常用知识点积累

    这篇博客主要是积累一下平时开发中有用的一些小的知识点. printk打印 #define AUDIO_LOGI(fmt,...) printk("[AUDIO][%s][%d][INFO]& ...

  2. android开发常用知识点备忘录

    1. 最近开发的时候发现view.setBackground(id)会拉伸图片,view.setImageResource(id)不会.即android:background会拉伸,android:s ...

  3. Android TV-电视开发常用知识点讲解

    在Android Tv设备开发时 app开发主要分为TV-UI,IPTV,OTT,DVB,TVOS,DEBUG等几大模块展开.这几大模块适用于常见盒子,电视等TV开发 下面就每个模块简单的做一下讲解如 ...

  4. iOS开发常用知识点(持续更新2018.6.25)

    iOS App打包上架超详细流程(手把手图文教你) https://www.jianshu.com/p/817686897ec1?open_source=weibo_search ios开发证书,描述 ...

  5. 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍

    C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...

  6. C#(Net)软件开发常用工具汇总,提高你的开发效率

    C#(Net)软件开发常用工具汇总,提高你的开发效率 写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用技术文章. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是 ...

  7. ANDROID 开发常用的框架、工具、API最全集合

    以下是我整理的安卓开发常用的工具.框架.API的集合,希望大家有帮助! 1.RecyclerView items的动画库 github https://github.com/wasabeef/recy ...

  8. java 操作vss,java开发常用工具总结,java开发常用工具

    java开发常用工具总结,java开发常用工具 1.editplus editplus 是我使用最频繁的工具,不管是java程序还是其他的语言的程序,本人都使用它,方便好用,速度快.如果配置好的话,可 ...

  9. Web前端开发常用的开发工具

    Web的发展日新月异,这也使得Web开发者不得不加快脚步,学习新的技术和编程语言.尤其是对于那些大量流量入口的网站来说,跟上技术发展趋势更是尤为重要.为了使得Web开发人员能够更加专注于业务层面的开发 ...

最新文章

  1. ios技术篇-CoreData
  2. 【组队学习】【31期】IOS开发
  3. Gut-2018-早期肝癌肠道生物标志物鉴定
  4. box-sizing详解
  5. 大型网站的负载均衡器、db proxy和db
  6. linux下源码安装git
  7. chrome控制台如何把vw显示成px_【CSS】rem,em,px的区别和使用场景
  8. java不显示图片_Java图片显示不出来,怎么解决
  9. 多個不同格式文件如何合並至一個PDF檔
  10. POJ 3172 (认真读题的题)
  11. 怎样进行软件测试结果分析,具体实例教你如何做LoadRunner结果分析
  12. WPF学习之路由事件
  13. 修改Gravatar生成的默认头像
  14. java工作流引擎Jflow父子流程demo
  15. 二叉树matlab整数规划,基于matlab构造最优二叉树.doc
  16. appium ios端自动化测试配置
  17. Deepin安装到移动硬盘
  18. Java多线程系列--【JUC线程池 03】- 线程池原理(二)
  19. 微软造的还原精灵EWF(Enhanced Write Filter)
  20. 探店「无聊猿」BAYC 主题餐厅:食物都很棒,口味超预期,有点小贵

热门文章

  1. 基于GAN的恶意软件对抗样本生成(Python实现)
  2. jsx中使用onClick等方法
  3. Python零基础入门直播课「一对一」
  4. 中移动TD智能机或将厚积薄发
  5. 推荐一款Chrome扩展程序:翰林英汉双解词典
  6. 手机炒股用什么杠杆交易股票软件好?
  7. 【kubernetes】k8s集群的搭建安装详细说明【创建集群、加入集群、踢出集群、重置集群...】【含离线搭建方法】
  8. 中投民生:今日A股大面积飘绿;注册制独领风骚
  9. 汉诺塔演示程序QBasic版,开博第一帖
  10. [ExpOS]开发经验