使用PyQt5编写小工具

——纯属把之前写的搬过来——



  PyQt是Qt库的Python接口,利用Python丰富的第三方库,再配合Qt Designer,PyQt成为了桌面软件开发非常好的选择。下面介绍一个在项目中的实际应用:

背景:某项目中,xx方需要开发自己的报送程序,主要会涉及与服务器端的socket通信、数据的aes加密等

1.实现数据加密传输

  使用Python的优势在于Python丰富的第三方库,这样一个小工具开发中,我们完全没有必要自己实现aes算法。下面是利用Crypto.Cipher库实现的aes加解密:

class MyCrypt():
    def __init__(self,key):
        self.key = key
        self.mode = AES.MODE_CBC
        self.iv = 16 * ‘\x00‘

    def myEncrypt(self,text):
        cryptor = AES.new(self.key,self.mode, self.iv)
        length = 16
        count = len(text.encode(‘gbk‘))
        if count < length:
            add = length-count
            text = text + (‘ ‘ * add)
        elif count > length:
            add = length-(count % length)
            text = text + (‘ ‘ * add)
        text = text.encode(‘gbk‘)
        cipherText = cryptor.encrypt(text)
        return cipherText

    def myDecrypt(self,text):
        cryptor = AES.new(self.key, self.mode, self.iv)
        plainText  = cryptor.decrypt(text)
        return plainText

2.多线程

  Qt的界面是在主线程中实现,在socket编程中如果把accept也放在主线程中实现,会导致界面假死。Python提供的多线程库可以帮助解决这个问题:

#ui thread
class InitInterface(ui.Ui_MainWindow):
    def    __init__(self, parent=None):
        super(InitInterface, self).__init__()
        #...

    def listenStart(self):
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s.bind((self.ip, int(self.port)))
        self.s.listen(100)
        c = myAccept(self.key, self.s)
        c.sigrefresh.connect(self.InterfaceRefresh)
        c.start()

#work thread
class myAccept(QObject, threading.Thread):
    sigrefresh = pyqtSignal()
    def    __init__(self, key, s):
        super(myAccept, self).__init__()
        #...
        self.s = s

    def run(self):
        self.conn, address = self.s.accept()
        while True:
            if not self.conn.recv(1024):
                break
    #...

3.界面

  Qt提供了类似css界面布局功能的qss

QPushButton
{
    color: rgb(255, 255, 255);
    background-color: rgb(167, 205, 255);
    border:none;
    padding: 3px;
    font-family: "Verdana";
    font-size: 15px;
    text-align: center;
}
QPushButton:hover, QPushButton:pressed , QPushButton:checked
{
    background-color: rgb(85, 170, 255);
    text-align: right;
    padding-right: 20px;
    font-weight:100
}
QPushButton:hover
{
    background-image: url(:/icon/icons/dark/appbar.navigate.next.png);
    background-repeat:no-repeat;
    background-position: center left;
}
QPushButton:pressed, QPushButton:checked
{
    background-image: url(:/icon/icons/light/appbar.navigate.next.png);
    background-repeat:no-repeat;
    background-position: center left;
}

qss使用:

qss_file = open(‘style_file.qss‘).read()
self.b_send.setStyleSheet(qss_file)

有图有真相:

时间: 2024-08-08 13:46:10

使用PyQt5编写小工具的相关文章

java 编写小工具 尝试 学习(五)

1.今天 学习 标签 的 控件 的使用 ,学习 视频教程 参考  :http://edu.51cto.com/lesson/id-17733.html 常用控件如下截图:

自己编写的一个看美剧学英语的复习,默背小工具

SubtitlesGleamingly ·看美剧学英语的一个复习,默背小工具,效果像音乐软件的透明歌词浮动框一样. ·操作简洁方便,可自由的移动位置,放大缩小,前进后退 ·可自动记录上一次复习到哪句话,可定时播放下一句 ·内置老友记第一季英/英汉字幕 效果 快捷键: ESC:关闭 Ctrl+C:复制 Ctrl+Enter:自动下一句 Ctrl+-:减少自动下一句的时间间隔 Ctrl++:增加自动下一句的时间间隔 鼠标: 鼠标左键/滚轮下:下一句 鼠标右键/滚轮上:上一句 在字幕左半区域滚动滑轮:

这些小工具让你的Android 开发更高效

在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vysor Vysor 是一个可以将手机的屏幕投影到电脑上,当然也可以操作,当我们做分享或者演示的时候,这个工具起到了作用. Vector Asset Android Studio 在1.4 支持了VectorAsset,所谓VectorAsset:它可以帮助你在Android 项目中添加Materia

JSON格式化着色小工具

在我们系统开发过程中越来越多的使用JSON作为数据交换的载体.JSON的特点是层次结构简洁清晰,易于人阅读和编写.同时也易于机器解析和生成.对于机器解析和生成这点本人表示认可,然而对于易于人阅读和编写可以通过下面一段JSON字符串来验证下: {"strValue":"here is str value","nullValue":null,"intvalue":999,"doublevalue":999,&q

几个常用文本处理小工具tr ,wc,cut,sort,uniq用法详解

几个文本处理的小工具:tr ,wc,cut,sort,uniq 1. tr命令可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大. 语法:tr 选项  SET1 SET2 -c或--complerment:取代所有不属于第一字符集的字符(就是补集): -d或--delete:删除所有属于第一字符集的字符: -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示: -t或--truncate-set1:先删除第

网上书城小工具(也适用于其他项目)

工欲善其事,必先利其器.下面我们来介绍一下在项目中要使用的小工具(itcast-tools-1.4.jar).这个小工具底层使用了: · c3p0数据库连接池: · common-beanutils: ·common-dbutils: · javaMail: 1 CommonUtils(通用工具类) CommonUtils类就两个方法: ·String uuid():生成长度32的随机字符,通常用来做实体类的ID.底层使用了UUID类完成: ·T toBean(Map, Class<T>):把

三个 DAL 相关的Java代码小工具

最近在做 DAL (Data Access Layer 数据访问层) 的服务化,发现有不少地方是人工编写比较繁琐的,因此写了几个小工具来完成. 1.  从 DAO 类自动生成 CoreService 类, CoreService 直接调用 DAO 类 思路: 通过正则表达式解析方法参数, 使用正则替换及源 DAO 文件来生成 CoreService 源文件. package zzz.study.utils; import cc.lovesq.dao.CreativeDAO; import jav

小工具的使用

工欲善其事,必先利其器.工作和学习中,我们都在用各种各样的工具.有顺手的,也有不顺手的,有牛叉的,也有简洁方便的.但大多数的时候,都是站在巨人的肩膀上,直接使用别人做好的工具.不过,别人写的,往往并不能完全适应我们现在的问题.所以我们自己有时候也有必要写一些自己的工具. 接下来,跟大家分享一下,自己编写,简单方便,而且非常实用的一个工具.大牛助手下载 需求说明: 工作需要大量的html转string,就写了一个小工具.如下图所示: 可以非常方便地把html转换成string. 另外还有一个工具,

编程身边的身边的那些小工具

作者平时喜欢做点笔记,然后就需要好多工具,下面我就介绍几款 极速pdf :说实话,真的是小巧方便啊,而且很实用,就是不能编写操作,只能看,readOnly ,你懂. 福晰阅读器:编写起来确实方便了很多,一些常用的工具一目了然,当然有些功能我到现在也找不到在哪里,而且找到了还要尝试多次才能知道怎么运用,真是神烦,(作者真的比较笨). (已经上传了这个小软件) wps:这个我倒是经常用到,因为它很普遍,而且基本上什么都难不倒它,但是开启的比较慢,而且又让登陆啥的还弹出个框框,讨厌,我就是不登陆(悄悄