python使用pyqt写带界面工具的示例代码

上篇介绍的使用python自带tkinter包,来写带界面的工具。

此篇介绍使用pyqt来开发测试工具。

tkinter的好处是python官方自带,上手容易(但手写控件复杂),布局和摆放都不直观和容易,因为是像素坐标定位,需要花较长时间在界面开发上。pyqt是第三方gui开发工具,是目前公认的python上最好的客户端界面开发工具,因为控件是通过qt设计师的手动拖拽,调整颜色 字体 大小等样式也很简单,不需要去代码层面来写大量界面代码,真正的所见即所得。

学习pyqt需要安装这些文件,pyqt是python第三方包,eric是qt设计界面,sip在工具打包时候需要用到。

安装好环境后,双击运行eric4.bat文件(我这里是eric4版本)

运行eric4.bat文件后的界面,点击designer图标,进入qt设计视图

此图为qt设计师界面

通过拖拽左侧的控件列表中的元件到ui中就可以。布局完成界面达到满意的效果后,点击菜单栏的文件另存为,保存为ui文件,文件后缀默认是.ui。

使用cmd 命令将.ui文件转换为.py文件,命令是

pyuic4 -o syui.py suoyouxiangmu.ui 

前面是py文件名称,后面是刚才保存的ui的文件名,执行此命令后会看到文件夹多了一个叫syui.py的文件。

打开文件,可以看到文件的大致内容,截图如下

要想把从ui转换得到的py文件,显示出界面来,还需要加入代码

不过,强烈建议不要这么写,不要把工具的功能代码和ui转换得到的py代码写在一个文件,因为在开发工具时候可能经常用调整界面不断的把ui转换成py代码 ,如果代码写在这文件,那么之前写的功能代码将会被覆盖了,把红框子中这段代码和后代功能代码写在另外一个文件。

pyqt中将一个函数和按钮绑定的语法是 mainwindow.pushButton_2.clicked.connect(function)

下面介绍一些获取控件的值和给控件赋默认值的方法

mainwindow.lineEdit.setText((u"zg 额外abc")) #给输入框赋值

mainwindow.textEdit.setPlainText('') #给texedit赋值

mainwindow.comboBox.setCurrentIndex(2) #给下拉框赋值

mainwindow.checkBox.setChecked(1) #给复选框checkbox赋值,可以填写True或者False 或0 ,1

print unicode(QString(mainwindow.lineEdit.text()))  #获取输入框的值
unicode(QString(mainwindow.textEdit.toPlainText()))#获textedit的值
print unicode(QString(mainwindow.comboBox.currentText()))#获取下拉框的值

print mainwindow.comboBox.currentIndex()       #获取下拉框的index
if mainwindow.checkBox.isChecked()==True  获取复选框checkbox的值

功能代码该怎么写就怎么写,与普通纯脚本的代码没有区别。如果事先把后台脚本功能写好了,加入到界面来只需要花很少的时间。需要说明的是,一些执行时间比较长的函数例如循环requests,或者接口的本上响应时间很大,需要用到Qthread子线程,否则使用普通的函数会把客户端界面卡死一段时间直至函数运行结束。

下面来展示我使用pyqt做的几个工具。我这几个工具,都是左边界面右边控制台显示的形式,非常方便在一个界面就能看到运行结果,不需要在界面操作然后去python ide的控制台去看结果。

此工具是将字符串进行base64编码或解码的工具,因为我们公司的接口都是前端传json的base64编码字符串给后台,后台再进行base64编码的形式,在做测试时候,经常会发来base64加密的字符串,如果不解密完全看不懂请求的什么意思什么功能。如果你抓我们公司项目的登录接口的包,会完全不知所措,因为大多数web都是抓包出来可以看到 username:xxxxx password:xxxxx yanzhenma:xxxxx的形式,我们公司的需要base64解码后才能看得到键值对,因为如此原因所以做了一个工具;虽然网上大把的各种转码网站,但每次用时候去打开一个网页不方便,此工具是引用了python 自带的base64包,不然我自己写代码转换base64,也不知道base64到底是怎么个编码规则的。

此工具是接口测试,进行get 和post请求,类似postman的功能和jmeter的接口测试功能。工具在后台代码中已处理cookie,只需要执行一次登录接口后,就可以操作其他的接口。第二个post的加了个base64的勾选,主要是为考虑工具通用性,不勾选base64适合大部分公司,当我们公司的如果不勾选,后台无法对一个不是base64加密的字符串进行base64解码,当然会返回错误状态码。工具是利用reqeusts做的,此工具利用了Qthread,否则遇上响应时间大的接口会卡死界面。

此工具是用客户端来代替本应该是app端完成的功能。正常测试是需要把txt中的一个字符串用工具生成二维码图片,然后用app扫描二维码,如果子码和父码比例是20比1,需要扫每生成一个二维码然后app扫描一次,完成一个过程需要10分钟左右。工具是直接一次性赋值txt20行子吗字符串,然后复制一个父码字符串到输入框,点击确认关联,后台会自动分割20个子码的网址,并且取出网址中的码值,这个地方主要利用正则表达式分割出20个子码码值,然后按照接口参数的格式post到服务端,整个过程20秒就可以完成。是很快吧,这个app由于需要扫码的原因无法使用appium,用接口来代替app的功能,对于测试业务流程节约大量时间。

当然这种工具的方法还是只能一次次的进行关联,后来因为有了新的需求,我使用的方法是纯脚本,读取两个记事本,每个记事本20000行,一次性的读取两个记事本内容后多次进行指定行的相互自动关联,假如按20:1的比例关联,关联20000个码值,一个接口一般0.2秒就可以返回接口,使用单线程requests也就几分钟吧。

此工具是测试项目的app功能的部分功能,把app多个界面的功能聚合到一个界面,辅助测试,比如测试报警的短信功能,用app填写各种表单需要2分钟,用工具只需要2秒钟,因为后台处理了大量默认参数。

此工具是检测线上服务器服务运行状态的工具,可以不间断的检测各个接口的返回是否正常,数据库状态是否正常,web服务器是否有异常。只需要设置指定的时间就可以自动循环去检测,把每天的每条命令的请求写到一个log日志中。一旦有异常将捕获到的异常,发送给相关的邮件人,并且把每天的每条命令的请求写到一个log日志中,并发送短信给相关人员,避免出问题了还不知情。其中邮件用的是python的smtlib的邮件功能,短信是让php做了一个发短信的接口,我只需要按制定的格式post相关内容到php,就可以发短信通知大家了。

之前做这个工具是做成了windows service的形式,把服务安装到windows的服务中静默运行,但是没要这种客户端方式可控性强。

此工具是给一个朋友做的功能,他需要不在cmd中运行cmd命令。用的是subprocess,代码比较短在此贴出代码了。

import subprocess
ui.lineEdit_14.setText((u"ping 127.0.0.1"))
ui.lineEdit_15.setText((u"https://180.42.98.2/uniform/user-login.action"))

class CmdThread(QThread):
  _signal = pyqtSignal(str)
  def __int__(self):
    super(CmdThread,self).__init__()

  def run(self):
    cmd_str=unicode(QString(ui.lineEdit_14.text()))
    print u'\n发送的cmd命令是: ',cmd_str
    try:
      ot=subprocess.check_output(cmd_str, shell=True)

      print ot.decode('gbk').encode('utf8')
    except Exception,e:
      print e
    print '********************************************'

cmdThread=CmdThread()
cmdThread._signal.connect(chuli)           #####cmd某些命令会消耗大量时间,需要用到Qthread,chuli是一个函数,链接右边黑色控制台
def cmd():
  cmdThread.start()

此工具是百度发帖,具体的实现代码在另外的一个百度回帖博客中已经介绍了,由于此账号是从淘宝买的,并且在调试代码时候,已经被百度永久性封禁了回帖功能,所以返回的不是errcode0,220012是账号被禁用回帖功能的意思。

最后介绍下pyqt工具的打包代码,使用py2exe打包成exe客户端。在cmd运行

#coding=utf-8
from distutils.core import setup
import py2exe
import glob

#python setup.py py2exe --includes sip   图标要手动复制图片到dist文件夹去

setup(
# targets to build
  windows = [{"script":"dysyui.py", "icon_resources": [(1, "logo1.ico")]} ],
  options = { "py2exe":{"dll_excludes":["MSVCP90.dll"],"bundle_files": 3,}},
  data_files = [("imageformats",glob.glob("C:\Python27\Lib\site-packages\PyQt4\plugins\imageformats\*.dll"))]
)

好了,关于pyqt就写这么多了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 用PyQt进行Python图形界面的程序的开发的入门指引

    一般来说,选择用于应用程序的 GUI 工具箱会是一件棘手的事.使用 Python(许多语言也一样)的程序员可以选择的 GUI 工具箱种类繁多,而每个工具箱都有各自的优缺点.有些速度比其它工具箱快,有些比较小:有些易于安装,有些更适合于跨平台使用(对于这一点,还要指出,有些支持您需要满足的特定特性).当然,各种库都相应具有各种许可证. 对于 Python 程序员而言,缺省的 GUI 选择是 Tk(通过 Tkinter 绑定)- 其原因显而易见.Tkinter 和闲置的 IDE 是由 Python

  • python使用pyqt写带界面工具的示例代码

    上篇介绍的使用python自带tkinter包,来写带界面的工具. 此篇介绍使用pyqt来开发测试工具. tkinter的好处是python官方自带,上手容易(但手写控件复杂),布局和摆放都不直观和容易,因为是像素坐标定位,需要花较长时间在界面开发上.pyqt是第三方gui开发工具,是目前公认的python上最好的客户端界面开发工具,因为控件是通过qt设计师的手动拖拽,调整颜色 字体 大小等样式也很简单,不需要去代码层面来写大量界面代码,真正的所见即所得. 学习pyqt需要安装这些文件,pyqt

  • Python聊天室带界面实现的示例代码(tkinter,Mysql,Treading,socket)

    一.前言 我用的是面向对象写的,把界面功能模块封装成类,然后在客户端创建对象然后进行调用.好处就是方便我们维护代码以及把相应的信息封装起来,每一个实例都是各不相同的. 所有的界面按钮处理事件都在客户端,在创建界面对象是会把客户端的处理事件函数作为创建对象的参数,之后再按钮上绑定这个函数,当点击按钮时便会回调函数 二.登录界面实现 登录界面模块chat_login_panel.py from tkinter import * # 导入模块,用户创建GUI界面 # 登陆界面类 class Login

  • C语言实现手写字符串处理工具的示例代码

    目录 头文件 实现文件 头文件 #ifndef STUDY_STR_UTIL_H #define STUDY_STR_UTIL_H #include "../structure/charhashmap.h" #include "../structure/charlist.h" #include "../structure/json.h" #include <malloc.h> #include <stdio.h> #inc

  • 使用Python来做一个屏幕录制工具的操作代码

    一.写在前面 作为一名测试,有时候经常会遇到需要录屏记录自己操作,方便后续开发同学定位.以前都是用ScreenToGif来录屏制作成动态图,偶尔的机会看到python也能实现.那就赶紧学习下. 二.效果展示 三.知识串讲 这次要讲的东西可能比较多了,涉及到pyqt5 GUI软件的制作.QThread多线程的使用.Sikuli库的图形操作.win32库的模拟键盘操作.cv2库的写视频文件等.下面我们一点点来蚕食我这次写的代码. 1.GUI界面制作 这次我用的是现成的Pyqt5界面布局类,QVBox

  • 基于Python编写微信清理工具的示例代码

    目录 主要功能 运行环境 核心代码 完整代码 前几天网上找了一款 PC 端微信自动清理工具,用了一下,电脑释放了 30GB 的存储空间,而且不会删除文字的聊天记录,很好用,感觉很多人都用得到,就在此分享一下,而且是用 Python 写的,喜欢 Python 的小伙伴可以探究一下. 主要功能 它可以自动删除 PC 端微信自动下载的大量文件.视频.图片等数据内容,释放几十 G 的空间占用,而且不会删除文字的聊天记录,可以放心使用. 工作以后,微信的群聊实在太多了,动不动就被拉入一个群中,然后群聊里大

  • C#写差异文件备份工具的示例

    大家是不是平常都有好多文件需要定期备份?如歌曲.视频.文档,代码文件等等,如果经常增加删除修改文件,就需要定期备份,最早之前文件都不大的时候我都是手工先全部删除,然后再全部拷贝,感觉比较保险.后来有了很大的电影文件和很琐碎的代码文件之后,这样搞太折磨人,就学网上说的用Xcpoy组装了一个批处理.学了C#后,感觉还是做一个GUI体验更好用起来更方便.至于专业的工具,还真没怎么试过,有点不放心吧,有好用的倒是可以试试.现在先自己做一个用着吧. 关键代码如下: private async void b

  • 基于Python实现千图成像工具的示例代码

    目录 前置 GUI制作 GUI界面设计 逻辑设计 图片处理 修改底图大小 修改组图大小 计算图片填充次数 组图合成 图片合成 GUI打包 千图成像也就是用N张图片组成一张图片的效果.制作方法有很多的,最常见的如用ps.懒人图云.foto-mosaik-edda这些制作. 千图成像的效果我大致分为两类:一为直接用N张图片根据底图的像素颜色.大小,一张张的组成底图,如foto-mosaik-edda:二为用N张图片根据底图的像素大小,组成一张与底图大小相仿的图片,再把二者合成,经调整透明度而成的图片

  • python tkinter实现界面切换的示例代码

    跳转实现思路 主程序相当于桌子: import tkinter as tk root = tk.Tk() 而不同的Frame相当于不同的桌布: face1 = tk.Frame(root) face2 = tk.Frame(root) ... 每个界面采用类的方式定义各自的控件和函数,每个界面都建立在一个各自定义的Frame上,那么在实现跳转界面的效果时, 只需要调用tkinter.destroy()方法销毁旧界面,同时生成新界面的对象,即可实现切换. 而对于切换的过程中改变背景颜色和大小,可以

  • Python中xml和dict格式转换的示例代码

    在做接口自动化的时候,请求数据之前都是JSON格式的,Python有自带的包来解决.最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,解决方式是:接口文档拿到的是XML,在线转化为json格式(目的是拿到xml数据的模板),存放到json文件中,根据接口名去提取. github原文介绍:使用XML的Python模块感觉就像您在使用JSON 链接:https://github.com/martinblech/xmltodict 下载xmltodict(pip install xml

  • python图片验证码识别最新模块muggle_ocr的示例代码

    一.官方文档 https://pypi.org/project/muggle-ocr/ 二模块安装 pip install muggle-ocr # 因模块过新,阿里/清华等第三方源可能尚未更新镜像,因此手动指定使用境外源,为了提高依赖的安装速度,可预先自行安装依赖:tensorflow/numpy/opencv-python/pillow/pyyaml 三.使用代码 # 导入包 import muggle_ocr # 初始化:model_type 包含了 ModelType.OCR/Model

随机推荐