记录——python的ui界面实现

前言

      在写完程序之后想让程序看起来更加可视化一点,所以想看看在上面加个ui界面,记录下发生过的问题以及解决方法。
      如果发现文章哪里有问题,欢迎指正。

为什么选择pyside2呢?

      在选择库的时候看到了很多对比pyside2和pyqt5的文章。我看完总结下来就是,pyqt5更加的成熟,资料也相对更多,但是如果在你的程序里面使用了pyqt5,那你的程序必须开源,而pyside2的话就没有这个规定。(但我后来才发现如果使用动态加载ui的话好像没有影响)

使用QT disigner

       QT disigner是一个可视化开发ui的一个工具,在pyqt5和pyside2的包里面都有这个工具,在这里我们可以拖动左边的各种控件来布局我们的ui在这里插入图片描述

加载ui

      在完成ui设计之后我们只是实现了界面,但还需要再加上控件相应的功能。我们可以将ui文件转换成python程序(网上有很多教程),再将这个程序里面生成的类导入我们的程序进行控件功能的处理,好处就是更加稳定,并且如果打包程序的话会方便点。
      还有一种就是直接在程序中动态加载ui,这样使用的好处是便于修改界面以及添加功能,可以直接利用qt设计师修改ui文件,再对相应添加的控件进行功能添加就可以了。如果使用第一种的话每次修改ui文件后都需要转换成python程序,比较麻烦。

ui界面未响应或卡死

      在添加功能之后会出现这样一种情况,就是执行一段程序的时候需要花费大量的时间,无法进行其它功能的检测以及操作。ui界面会未响应或者直接卡死。
      比如我是进行目标检测,在加载权重的时候无法进行按钮点击或者其它操作。解决方法就是使用python中threading库里面的Thread创建一个新的线程,让它来进行加载模型的操作,这样我们的主线程依旧可以进行我们的其它功能的操作。

在新线程中无法实时更新ui界面

      我们在进行多线程操作的时候,因为它是在与界面显示不同的线程中进行操作的,所以我们没有办法直接将数据更新到我们的ui界面中。这时候我们需要使用PySide2.QtCore里的Signal,QObject类。我们要先定义一个信号源的类。在这里插入图片描述
      在创建好之后我们需要在界面的初始化函数里面实例化这个类,并写一个函数与这个信号连接。在这里插入图片描述
      这样我们就定义好了这个信号,在下面我们就可以利用emit来调用了。
在这里插入图片描述
      这样就可以达到实时更新ui界面的效果了。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值