最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WxPython界面如何用pubsub展示進(jìn)程工作的進(jìn)度條

 更新時間:2022年11月01日 11:15:31   作者:陳年椰子  
這篇文章主要介紹了WxPython界面如何用pubsub展示進(jìn)程工作的進(jìn)度條,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

用WxPython做界面時, 如果數(shù)據(jù)操作時間比較長,會使 WxPython 界面處于假死狀態(tài),用戶體驗非常不好。

WxPython是利用pubsub來完成消息的傳送。

下面提供一個   WxPython界面利用pubsub 展示進(jìn)程工作的進(jìn)度條的例子,實際使用, 只要修改 

WorkThread 里的 run 內(nèi)容 及 MainFrame 里的 updateDisplay 內(nèi)容即可。

環(huán)境需求

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與線程通訊使用進(jìn)度條的例子
import wxpub as wp
wp.test()
"""
import wx
from pubsub import pub
from time import sleep
import threading
import sys
 
 
 
# 線程調(diào)用耗時長代碼
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='計算完成,結(jié)果 {}'.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, "關(guān)于",
                "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",
                      "關(guān)于",
                      wx.OK|wx.ICON_INFORMATION)
 
    def updateDisplay(self, mstatus):
        """
        Receives data from thread and updates the display
        """
        if mstatus.find("workstart") >= 0:
            self.SetStatusText('開始計算,代碼不提供中斷線程語句,請等待計算結(jié)束!')
            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(',')
                # 示范 , 實際使用需要傳送進(jìn)度
                # 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()

運(yùn)行后, 點擊 工作-開始

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實現(xiàn)識別圖片內(nèi)容的方法分析

    Python實現(xiàn)識別圖片內(nèi)容的方法分析

    這篇文章主要介紹了Python實現(xiàn)識別圖片內(nèi)容的方法,結(jié)合實例形式分析了tesseract模塊的下載、安裝配置及使用tesseract模塊進(jìn)行圖片識別的相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python實現(xiàn)ElGamal加密算法的示例代碼

    Python實現(xiàn)ElGamal加密算法的示例代碼

    ElGamal加密算法是一個基于迪菲-赫爾曼密鑰交換的非對稱加密算法。這篇文章通過示例代碼給大家介紹Python實現(xiàn)ElGamal加密算法的相關(guān)知識,感興趣的朋友一起看看吧
    2020-06-06
  • Python實現(xiàn)批量修改圖片格式和大小的方法【opencv庫與PIL庫】

    Python實現(xiàn)批量修改圖片格式和大小的方法【opencv庫與PIL庫】

    這篇文章主要介紹了Python實現(xiàn)批量修改圖片格式和大小的方法,結(jié)合實例形式分析了Python基于opencv庫與PIL庫針對圖片的讀寫、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • 詳解pyqt5的UI中嵌入matplotlib圖形并實時刷新(挖坑和填坑)

    詳解pyqt5的UI中嵌入matplotlib圖形并實時刷新(挖坑和填坑)

    這篇文章主要介紹了詳解pyqt5的UI中嵌入matplotlib圖形并實時刷新(挖坑和填坑),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 在Python中,不用while和for循環(huán)遍歷列表的實例

    在Python中,不用while和for循環(huán)遍歷列表的實例

    今天小編就為大家分享一篇在Python中,不用while和for循環(huán)遍歷列表的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python正則表達(dá)式匹配和提取IP地址

    Python正則表達(dá)式匹配和提取IP地址

    這篇文章主要介紹了Python正則表達(dá)式匹配和提取IP地址的實例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • Python實現(xiàn)日志備份守護(hù)進(jìn)程的示例

    Python實現(xiàn)日志備份守護(hù)進(jìn)程的示例

    本文主要介紹了Python實現(xiàn)日志備份守護(hù)進(jìn)程的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Django 序列化的具體使用

    Django 序列化的具體使用

    django rest framework 中的序列化組件,本文主要介紹了Django 序列化的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于Python fminunc 的替代方法

    基于Python fminunc 的替代方法

    今天小編就為大家分享一篇基于Python fminunc 的替代方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用pip下載時提示"You?are?using?pip?version?8.1.1,?however?version?22.1?is?available."錯誤解決

    使用pip下載時提示"You?are?using?pip?version?8.1.1,?howev

    最近在使用python的pip下載庫時,出現(xiàn)了報錯,所以下面這篇文章主要給大家介紹了關(guān)于使用pip下載時提示“You?are?using?pip?version?8.1.1,?however?version?22.1?is?available.“錯誤的解決方法,需要的朋友可以參考下
    2022-08-08

最新評論

淳安县| 民县| 铁岭县| 邯郸市| 五峰| 辽源市| 镇赉县| 临城县| 丹阳市| 会东县| 乐安县| 克山县| 隆安县| 望奎县| 栖霞市| 花莲市| 郓城县| 小金县| 赤城县| 简阳市| 靖远县| 通榆县| 巩留县| 建宁县| 信宜市| 元江| 蒙城县| 嵊州市| 饶河县| 永安市| 和平区| 北安市| 固阳县| 东源县| 托克托县| 高州市| 和林格尔县| 旺苍县| 宣武区| 嘉祥县| 汉阴县|