【PyQt】记录各种组件的使用方法【下】

简介: 使用Python开发GUI界面工具,通常可用选择PyQt框架,非常易使用,而且网上也有很多相关的文档分享。我也是在写了多个GUI界面后,自己整理了一些常用的使用文档,在此分享给大家(PyQt4~PyQt5适用)。

【PyQt】记录各种组件的使用方法



 使用Python开发GUI界面工具,通常可用选择PyQt框架,非常易使用,而且网上也有很多相关的文档分享。我也是在写了多个GUI界面后,自己整理了一些常用的使用文档,在此分享给大家(PyQt4~PyQt5适用)。

 

QSystemTrayIcon 系统托盘图标


class QSysTrayIcon(QSystemTrayIcon):
    """ 系统托盘图标功能 """
    def __init__(self, parent=None):
        super(QSysTrayIcon, self).__init__(parent)
        # 系统菜单
        self.mContextMenu = QMenu()
        # 设置系统菜单
        self.setContextMenu(self.mContextMenu)
        # 托盘的图标
        self.setIcon(QIcon("capture.png"))
    def send_message(self, title, content, icon_=0, delay_=10000):
        """
        显示一条消息通知
        :param title:
        :param content:
        :param icon_: (0没有图标 1信息图标 2警告图标 3错误图标),0还是有一个小图标
        :param delay_: 持续间隔(毫秒)
        :return:
        """
        self.showMessage(title, content, icon=icon_, msecs=delay_)
    def add_menu_action(self, label_, parent_, triggered_):
        """
        添加操作按钮
        :param label_:
        :param parent_:
        :param triggered_:
        :return:
        """
        action = QAction(label_, parent_, triggered=triggered_)
        self.mContextMenu.addAction(action)
        return action
    def quit(self):
        """
        退出
        :return:
        """
        self.setVisible(False)
## 使用
mTrayIcon = QSysTrayIcon(self) # self=主窗体,QMainWindow
mToggleAction = mTrayIcon.add_menu_action("隐藏界面", self, self.on_toggle_widget)
mTrayIcon.show()
# 在主窗体的closeEvent中调用self.mTrayIcon.quit()来保证icon消失
# 发送一个气泡消息,可以做icon和显示的时长
mTrayIcon.send_message("提示", "界面已经显示")


QSplashScreen 启动画面


这是官方提供的一种,也可以自己用QWidget搞


class SplashScreen(QSplashScreen):
    def set_image_data(self, image, w, h):
        """设置启动图数据"""
        # 缩放图片和设置画面尺寸
        self.setMaximumSize(w, h)
        image = image.scaled(w, h, Qt.KeepAspectRatio)
        self.setPixmap(image) # 这个就是设置启动画面图
    def effect_fade_in(self, timeout=1.0, addv=0.02):
        """ 淡入 """
        self.setWindowOpacity(0)
        loop_count = int(1 / addv)
        sleep_time = timeout / loop_count
        for i in range(loop_count):
            new_opacity = self.windowOpacity() + 0.02  # 设置淡入
            if new_opacity > 1:
                break
            self.setWindowOpacity(new_opacity)
            time.sleep(sleep_time)
    def effect_fade_out(self, timeout=0.5, addv=0.02):
        """ 淡出 """
        self.setWindowOpacity(1)
        loop_count = int(1 / addv)
        sleep_time = timeout / loop_count
        for i in range(loop_count):
            new_opacity = self.windowOpacity() - 0.02  # 设置淡出
            if new_opacity < 0:
                break
            self.setWindowOpacity(new_opacity)
            time.sleep(sleep_time)
    def on_show_effect(self):
        """ 开始显示的效果 """
        self.setWindowOpacity(0)
        self.show()
        self.effect_fade_in()
    def on_hide_effect(self):
        """ 结束显示的效果 """
        self.effect_fade_out()
    def mousePressEvent(self, evt):
        """重写鼠标点击事件,阻止点击后消失"""
        pass
    def mouseDoubleClickEvent(self, *args, **kwargs):
        """重写鼠标移动事件,阻止出现卡顿现象"""
        pass
    def enterEvent(self, *args, **kwargs):
        """重写鼠标移动事件,阻止出现卡顿现象"""
        pass
    def mouseMoveEvent(self, *args, **kwargs):
        """重写鼠标移动事件,阻止出现卡顿现象"""
        pass
# 样例,正常的流程可以自己随便接
app = QApplication(argv)
app.processEvents() # 让事件继续派发
sp = SplashScreen() # 动画没有试过,需要
sp.on_show_effect()
 <some main widiget init > # 可以在这里初始化主界面
sp.on_hide_effect()
sp.finish(some widget) # 这样启动画面会等待这个widget显示后才会消失。
sp.deleteLater()
# 下面是网上的显示gif动画的代码
class GifSplashScreen(QSplashScreen):
    def __init__(self, *args, **kwargs):
        super(GifSplashScreen, self).__init__(*args, **kwargs)
        self.movie = QMovie('some.gif')
        self.movie.frameChanged.connect(self.onFrameChanged)
        self.movie.start()
    def onFrameChanged(self, _):
        self.setPixmap(self.movie.currentPixmap())
    def finish(self, widget):
        self.movie.stop()
        super(GifSplashScreen, self).finish(widget)


QMovie 显示动画


# 在界面显示gif动画,需要用到QMovie和QLabel
label = QLabel()
movie = QMovie("gif")
movie.setScaledSize(QSize()) # 设置缩放尺寸
movie.setCacheMode(QMovie.CacheAll) # 缓存
movie.setSpeed(100) # 设置速度
label.setMovie(movie) # 设置动画
label.setScaledContents(True) #按内容缩放
movie.start() # 开始播放


以上就是目前我在项目中使用到的组件的记录,希望对大家有所帮助!


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
20天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
68 7
|
1月前
|
Python
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
本文提供了一份详细的PySide6与VSCode联动的操作指南,包括安装配置VSCode、安装必要的扩展、配置扩展以及编辑和运行PySide6项目。文中还提到了相关工具如uic.exe、rcc.exe和designer.exe的用途,并提供了进一步学习的资源。
314 1
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
|
2月前
|
Python
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
|
1月前
|
XML JSON Ubuntu
Python实用记录(十五):PyQt/PySide6打包成exe,精简版(nuitka/pyinstaller/auto-py-to-exe)
本文介绍了使用Nuitka、PyInstaller和auto-py-to-exe三种工具将Python的PyQt/PySide6应用打包成exe文件的方法。提供了详细的安装步骤、打包命令和参数说明,适合新手学习和实践。
324 0
|
3月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
204 1
|
3月前
|
数据可视化 Linux API
Tkinter与PyQt的对比
【8月更文挑战第3天】本文对比了Python中两大GUI工具包Tkinter与PyQt。Tkinter作为Python标准库的一部分,易于学习且轻量级,适合快速开发简单的跨平台GUI应用。PyQt功能强大且灵活,支持复杂应用的开发,更适合有经验的开发者。通过示例代码展示了如何使用这两种工具包创建基本的GUI应用及图像查看器,帮助读者理解它们的不同之处。选择哪个工具包取决于项目的具体需求、开发者的经验以及对功能和性能的要求。
105 4
|
4月前
|
开发者 Python
Python函数与模块使用方法
【7月更文挑战第24天】Python 是一种功能强大的编程语言,拥有丰富的函数和模块,使得开发者能够轻松地构建复杂的应用程序。本文将介绍 Python 中函数和模块的基本使用方法,并提供一些代码实例。
47 3
|
4月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
5月前
|
定位技术 Python
Python的try、except异常处理模块使用方法
所以,我们就解决了由于可能具有的arcpy.ExecuteError异常而导致的程序中断问题;大家在实际使用时,按照自己程序中可能出现的报错类,对本文出现的arcpy.ExecuteError异常类加以修改即可。
|
4月前
|
安全 Java 开发者
Python中的多线程高级使用方法
**Python多线程高级指南摘要** 本文探讨了Python中多线程的高级技术,尽管GIL限制了并行执行,但多线程仍适用于IO密集型任务和提升UI响应。内容包括: - 使用`threading`模块导入和创建线程,示例展示了如何启动多个线程执行函数。 - 高级用法涉及线程池,通过`ThreadPoolExecutor`管理线程,简化大量线程的创建和控制。 - 线程同步:介绍锁和条件变量的概念,以及如何使用它们确保数据一致性。 - 避免死锁的策略,如使用`try/finally`确保锁的正确释放 - 线程局部数据(Thread Local Data)允许每个线程拥有独立的数据副本,避免冲突