【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() # 开始播放


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


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

相关文章
|
2月前
|
机器学习/深度学习 算法 Linux
Yolov5水果分类识别+pyqt交互式界面
Yolov5水果分类识别+pyqt交互式界面
76 1
|
3月前
|
开发框架 开发者 Python
探索Python GUI编程:从Tkinter到PyQt的全方位使用
在当今技术发展日新月异的时代,Python作为一种简洁高效的编程语言,拥有广泛的应用领域。其中,GUI(图形用户界面)编程是Python开发者经常涉足的领域之一。本文将介绍两个常用的Python GUI库——Tkinter和PyQt,并深入探讨其使用方法、特点以及适用场景,帮助读者全面了解Python GUI编程的魅力。
|
3月前
|
Python
PyQt绘制股票K线多图Y坐标对齐
PyQt绘制股票K线多图Y坐标对齐
51 0
|
5月前
|
Python
pyqt 重写关闭窗口事件代码
pyqt 重写关闭窗口事件代码
39 0
|
5月前
|
存储 Python
PySide2 Pyqt 解决pyinstaller打包图片资源的问题
PySide2 Pyqt 解决pyinstaller打包图片资源的问题
40 0
|
3月前
|
数据可视化 Linux C++
Python GUI编程:Tkinter与PyQt的选择
Python作为一门流行的编程语言,在GUI编程领域也有着非常强大的工具。其中,Tkinter和PyQt是两个备受推崇的GUI库。本文将介绍这两个库的优缺点,并帮助读者决定应该选择哪一个。
60 0
|
3月前
|
前端开发 Python
【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能
【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能
62 0
|
6月前
|
网络协议 Linux iOS开发
【100天精通python】Day40:GUI界面编程_PyQt 从入门到实战(完)_网络编程与打包发布
【100天精通python】Day40:GUI界面编程_PyQt 从入门到实战(完)_网络编程与打包发布
76 0
|
2月前
|
数据可视化 API 开发者
Python中的图形界面开发:Tkinter、PyQt或wxPython入门
Python中的图形界面开发:Tkinter、PyQt或wxPython入门
|
6月前
|
SQL 安全 关系型数据库
【100天精通python】Day38:GUI界面编程_PyQt 从入门到实战(中)_数据库操作与多线程编程
【100天精通python】Day38:GUI界面编程_PyQt 从入门到实战(中)_数据库操作与多线程编程
71 0