python_PYQT5工具开发常用知识点(一)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
文章目录
前言
一、.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工具开发常用知识点(一)相关推荐
- 底层开发常用知识点积累
这篇博客主要是积累一下平时开发中有用的一些小的知识点. printk打印 #define AUDIO_LOGI(fmt,...) printk("[AUDIO][%s][%d][INFO]& ...
- android开发常用知识点备忘录
1. 最近开发的时候发现view.setBackground(id)会拉伸图片,view.setImageResource(id)不会.即android:background会拉伸,android:s ...
- Android TV-电视开发常用知识点讲解
在Android Tv设备开发时 app开发主要分为TV-UI,IPTV,OTT,DVB,TVOS,DEBUG等几大模块展开.这几大模块适用于常见盒子,电视等TV开发 下面就每个模块简单的做一下讲解如 ...
- iOS开发常用知识点(持续更新2018.6.25)
iOS App打包上架超详细流程(手把手图文教你) https://www.jianshu.com/p/817686897ec1?open_source=weibo_search ios开发证书,描述 ...
- 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...
- C#(Net)软件开发常用工具汇总,提高你的开发效率
C#(Net)软件开发常用工具汇总,提高你的开发效率 写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用技术文章. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是 ...
- ANDROID 开发常用的框架、工具、API最全集合
以下是我整理的安卓开发常用的工具.框架.API的集合,希望大家有帮助! 1.RecyclerView items的动画库 github https://github.com/wasabeef/recy ...
- java 操作vss,java开发常用工具总结,java开发常用工具
java开发常用工具总结,java开发常用工具 1.editplus editplus 是我使用最频繁的工具,不管是java程序还是其他的语言的程序,本人都使用它,方便好用,速度快.如果配置好的话,可 ...
- Web前端开发常用的开发工具
Web的发展日新月异,这也使得Web开发者不得不加快脚步,学习新的技术和编程语言.尤其是对于那些大量流量入口的网站来说,跟上技术发展趋势更是尤为重要.为了使得Web开发人员能够更加专注于业务层面的开发 ...
最新文章
- ios技术篇-CoreData
- 【组队学习】【31期】IOS开发
- Gut-2018-早期肝癌肠道生物标志物鉴定
- box-sizing详解
- 大型网站的负载均衡器、db proxy和db
- linux下源码安装git
- chrome控制台如何把vw显示成px_【CSS】rem,em,px的区别和使用场景
- java不显示图片_Java图片显示不出来,怎么解决
- 多個不同格式文件如何合並至一個PDF檔
- POJ 3172 (认真读题的题)
- 怎样进行软件测试结果分析,具体实例教你如何做LoadRunner结果分析
- WPF学习之路由事件
- 修改Gravatar生成的默认头像
- java工作流引擎Jflow父子流程demo
- 二叉树matlab整数规划,基于matlab构造最优二叉树.doc
- appium ios端自动化测试配置
- Deepin安装到移动硬盘
- Java多线程系列--【JUC线程池 03】- 线程池原理(二)
- 微软造的还原精灵EWF(Enhanced Write Filter)
- 探店「无聊猿」BAYC 主题餐厅:食物都很棒,口味超预期,有点小贵