iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >WxPython界面如何用pubsub展示进程工作的进度条
  • 291
分享到

WxPython界面如何用pubsub展示进程工作的进度条

2024-04-02 19:04:59 291人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录环境需求安装 pubsub运行后, 点击 工作-开始用Wxpython做界面时, 如果数据操作时间比较长,会使 WxPython 界面处于假死状态,用户体验非

用Wxpython做界面时, 如果数据操作时间比较长,会使 WxPython 界面处于假死状态,用户体验非常不好。

WxPython是利用pubsub来完成消息的传送。

下面提供一个   WxPython界面利用pubsub 展示进程工作的进度条的例子,实际使用, 只要修改 

WorkThread 里的 run 内容 及 MainFrame 里的 updateDisplay 内容即可。

环境需求

Python 3.7.3
wxPython          4.0.6
Pypubsub          4.0.3

安装 pubsub

pip install pypubsub
# encoding: utf-8
"""
@author: 陈年椰子
@contact: hndm@qq.com
@version: 1.0
@file: wxpub.py
@time: 2020/02/25  
说明  WxPython 界面利用pubsub与线程通讯使用进度条的例子
import wxpub as wp
wp.test()
"""
import wx
from pubsub import pub
from time import sleep
import threading
import sys
 
 
 
# 线程调用耗时长代码
class WorkThread(threading.Thread):
    def __init__(self):
        """Init Worker Thread Class."""
        threading.Thread.__init__(self)
        self.breakflag = False
        self.start()
 
    def stop(self):
        self.breakflag = True
 
    # 耗时长的代码
    def workproc(self):
        sum_x = 0
        for i in range(1, 101):
            if self.breakflag:
                pub.sendMessage("update", mstatus='中断')
                sleep(2)
                break
            sum_x = sum_x + i
            sleep(0.1)
            pub.sendMessage("update", mstatus='计算{} , 合计 {}'.fORMat(i, sum_x))
        return sum_x
 
    def run(self):
        """Run Worker Thread."""
        pub.sendMessage("update", mstatus='workstart')
        result = self.workproc()
        sleep(2)
        pub.sendMessage("update", mstatus='计算完成,结果 {}'.format(result))
        pub.sendMessage("update", mstatus='workdone')
 
 
 
class MainFrame(wx.Frame):
    """
    简单的界面
    """
 
    def __init__(self, *args, **kw):
        # ensure the parent's __init__ is called
        super(MainFrame, self).__init__(*args, **kw)
 
        # create a panel in the frame
        pnl = wx.Panel(self)
 
        # and put some text with a larger bold font on it
        self.st = wx.StaticText(pnl, label="分析工具 V 2019", pos=(25,25))
        font = self.st.GetFont()
        font.PointSize += 5
        font = font.Bold()
 
        self.st.SetFont(font)
 
 
        # create a menu bar
        self.makeMenuBar()
 
        self.gauge = wx.Gauge(self, range=100, size=(300, 20))
        self.gauge.SetBezelFace(3)
        self.gauge.SetShadowWidth(3)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.st, 0, wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 0)
        sizer.Add(self.gauge, 0, wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 0)
 
        self.SetSizer(sizer)
 
        # and a status bar
        self.CreateStatusBar()
        self.SetStatusText("启动完成!")
 
        pub.subscribe(self.updateDisplay, "update")
 
 
 
 
    def makeMenuBar(self):
        """
        A menu bar is composed of menus, which are composed of menu items.
        This method builds a set of menus and binds handlers to be called
        when the menu item is selected.
        """
 
        # Make a file menu with Hello and Exit items
        fileMenu = wx.Menu()
        # The "\t..." syntax defines an accelerator key that also triggers
        # the same event
        # helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H",
        #         "Help string shown in status bar for this menu item")
        self.startItem = fileMenu.Append(-1, "开始",
                "开始计算")
        self.stopItem = fileMenu.Append(-1, "停止",
                                         "中断计算")
        fileMenu.AppendSeparator()
        self.exitItem = fileMenu.Append(-1, "退出",
                "退出")
 
        # Now a help menu for the about item
        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(-1, "关于",
                "WxPython 界面与线程通讯的例子")
 
 
        # Make the menu bar and add the two menus to it. The '&' defines
        # that the next letter is the "mnemonic" for the menu item. On the
        # platforms that support it those letters are underlined and can be
        # triggered from the keyboard.
        self.menuBar = wx.MenuBar()
        self.menuBar.Append(fileMenu, "工作")
        self.menuBar.Append(helpMenu, "信息")
 
        # Give the menu bar to the frame
        self.SetMenuBar(self.menuBar)
        self.stopItem.Enable(False)
 
        self.count = 0
 
 
 
        # Finally, associate a handler function with the EVT_MENU event for
        # each of the menu items. That means that when that menu item is
        # activated then the associated handler functin will be called.
        self.Bind(wx.EVT_MENU, self.OnStart, self.startItem)
        self.Bind(wx.EVT_MENU, self.OnStop, self.stopItem)
        self.Bind(wx.EVT_MENU, self.OnExit,  self.exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)
 
 
    def OnExit(self, event):
        """Close the frame, terminating the application."""
        try:
            self.work.stop()
        except:
            pass
        self.Close(True)
        sys.exit()
 
 
    def OnStart(self, event):
        self.work = WorkThread()
 
    def OnStop(self, event):
        self.work.stop()
 
 
    def OnAbout(self, event):
        """Display an About Dialog"""
        wx.MessageBox("分析工具 v2019",
                      "关于",
                      wx.OK|wx.ICON_INFORMATION)
 
    def updateDisplay(self, mstatus):
        """
        Receives data from thread and updates the display
        """
        if mstatus.find("workstart") >= 0:
            self.SetStatusText('开始计算,代码不提供中断线程语句,请等待计算结束!')
            self.startItem.Enable(False)
            self.stopItem.Enable(True)
            self.exitItem.Enable(False)
        if mstatus.find("workdone") >= 0:
            self.SetStatusText('完成!')
            self.stopItem.Enable(False)
            self.startItem.Enable(True)
            self.exitItem.Enable(True)
        else:
            self.st.SetLabel(mstatus)
            if mstatus.find(",")>0 and mstatus.find("计算")>=0:
                mdata = mstatus.split(',')
                # 示范 , 实际使用需要传送进度
                # print(int(mdata[0].replace('计算','')))
                g_count = int(mdata[0].replace('计算',''))
                self.gauge.SetValue(g_count)
 
 
 
def test():
    app = wx.App()
    frm = MainFrame(None, title='分析工具')
    frm.Show()
    app.MainLoop()
 
if __name__=="__main__":
    test()

运行后, 点击 工作-开始

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: WxPython界面如何用pubsub展示进程工作的进度条

本文链接: https://www.lsjlt.com/news/120871.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • WxPython界面如何用pubsub展示进程工作的进度条
    目录环境需求安装 pubsub运行后, 点击 工作-开始用WxPython做界面时, 如果数据操作时间比较长,会使 WxPython 界面处于假死状态,用户体验非...
    99+
    2024-04-02
  • WxPython界面利用pubsub如何实现多线程控制
    目录WxPython界面用pubsub实现多线程控制下面提供本文的代码WxPython界面用pubsub实现多线程控制 用WxPython做界面时, 如果数据操作时间比较长,会使 W...
    99+
    2024-04-02
  • 如何用java在界面上显示出进度条
    要在Java界面上显示进度条,可以使用Swing库中的JProgressBar类。以下是一个简单的示例代码:```javaimpor...
    99+
    2023-08-19
    java
  • 如何在Android中动态显示进度条的进度
    在Android中,可以使用ProgressBar来显示进度条的进度。以下是一个示例代码,演示如何动态地更新进度条的进度。1. 在布...
    99+
    2023-09-20
    Android
  • python如何使用tqdm制作进度条
    这篇文章主要介绍了python如何使用tqdm制作进度条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用tqdm制作进度条TQDM库使你可以为Python和CLI创建快速地...
    99+
    2023-06-27
  • 如何进行Qt编写提示进度条的实现
    今天就跟大家聊聊有关如何进行Qt编写提示进度条的实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前言我们在很多的安装包中,在安装过程中,经常可以在底部看到一个漂亮的进度条,上面...
    99+
    2023-06-22
  • 如何实现可以随进度显示不同颜色的css3进度条
    这篇文章主要讲解了“如何实现可以随进度显示不同颜色的css3进度条”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现可以随进度显示不同颜色的css3进度...
    99+
    2024-04-02
  • 如何使用CSS3制作一个简单的进度条
    小编给大家分享一下如何使用CSS3制作一个简单的进度条,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!这里只是一个小demo,一个用CSS3写的进度条。如图所示:具体代码如下:<!DOCTYPE HTML&n...
    99+
    2023-06-08
  • 关于使用Python的time库制作进度条程序
    目录制作进度条运行程序效果单行动态刷新带刷新的文本进度条程序 扩展: 使用 tqdm 第三方进度条工具库制作进度条 首先,需要调用 Python 标准时间库 time,如下...
    99+
    2023-05-17
    Python 进度条 Python time库 time库制作进度条
  • 如何进行Python线程的多线程展示
    如何进行Python线程的多线程展示,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么多线程?多线程,就是多个独立的运行单位,同时执行同样的事情。想想一下,文章发布后同时被...
    99+
    2023-06-22
  • 如何使用CSS制作旋转进度条的实现步骤
    CSS是一种用于设计和布局网页的样式表语言,它提供了丰富的属性和功能。其中之一是可以使用CSS制作旋转进度条。这个特效可以用于展示页面加载或任务进度等情况。以下是具体的实现步骤和代码示例:第一步:HTML结构首先,我们需要在HTML中创建一...
    99+
    2023-10-21
    CSS 制作 旋转进度条
  • Vue使用NProgress实现页面顶部的进度条显示效果
    目录一、安装二、常用配置项1、递增进度条2、动画设置三、使用一、安装 npm i nprogress -S 二、常用配置项 1、递增进度条 以随机量递增,将其用于加载 NProgre...
    99+
    2022-12-23
    Vue NProgress Vue NProgress进度条
  • Win10如何对扩展显示屏进行操作的
    这篇文章主要讲解了“Win10如何对扩展显示屏进行操作的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Win10如何对扩展显示屏进行操作的”吧!具体方法:驱动安装后,电脑的任务栏会出现一个电...
    99+
    2023-06-27
  • 如何使用CSS实现带箭头的流程进度条
    这篇文章将为大家详细讲解有关如何使用CSS实现带箭头的流程进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先写出一个基本的样式。.cssNav li{   &...
    99+
    2023-06-08
  • vue如何实现页面加载时的进度条功能
    这篇文章将为大家详细讲解有关vue如何实现页面加载时的进度条功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先看一张图如果我们的程序每次页面切换时,顶部也有一个进度条,...
    99+
    2024-04-02
  • 如何启用Ubuntu 14.04 LTS中的ATP进度条
    这篇文章将为大家详细讲解有关如何启用Ubuntu 14.04 LTS中的ATP进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Ubuntu 14.04 LTS 中预装了一个 0.9.15 版本的新 A...
    99+
    2023-06-13
  • 如何使用纯CSS和jQuery实现在页面顶部显示的进度条效果
    小编给大家分享一下如何使用纯CSS和jQuery实现在页面顶部显示的进度条效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、纯CSS实现代码如下:<style type...
    99+
    2024-04-02
  • Xamarin XAML语言中如何使用属性设置进度条的当前进度
    这篇文章主要为大家展示了“Xamarin XAML语言中如何使用属性设置进度条的当前进度”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Xamarin XAML语言中如何使用属性设置进度条的当前进...
    99+
    2023-06-04
  • C#进度条使用之多线程应用如何实现
    这篇文章将为大家详细讲解有关C#进度条使用之多线程应用如何实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。让我们来看看具体的实现://声明一个委托 ,C#进度条使用之多线程应用 pu...
    99+
    2023-06-17
  • 如何使用CSS制作网页加载进度条的实现步骤
    如何使用CSS制作网页加载进度条的实现步骤在现代网页设计中,加载速度对于用户体验至关重要。为了提升用户体验,可以使用CSS制作网页加载进度条,让用户清晰地了解网页加载进度。本文将介绍使用CSS制作网页加载进度条的实现步骤,并提供具体的代码示...
    99+
    2023-10-26
    进度条 CSS 网页
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作