【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() # 开始播放
以上就是目前我在项目中使用到的组件的记录,希望对大家有所帮助!
欢迎微信搜索"游戏测试开发"关注一起沟通交流。