Abaqus GUI程序开发之常用控件使用方法(十六):进度条的使用方法

本文介绍了Abaqus二次开发中两种类型的进度条使用方法。一种是通过milestone()函数在内核文件中监控执行进程,另一种是在图形界面中利用AFXProgressBar创建。内核文件中的进度条适用于任何可计量的内核执行程序,而AFXProgressBar则需用户自定义GUI命令。文章提供了详细的语法、实例和代码展示,帮助理解如何在实际操作中创建和使用这两种进度条。
摘要由CSDN通过智能技术生成

  

Abaqus二次开发过程中,最常用的有两类进度条。

  • 一类是创建于内核文件中.用于监控内核指令执行进程的进度条,通过milestone()函数实现。
  • 另一类是传统的进度条AFXProgressBar,创建于图形界面文件中。下面分别介绍两类进度条的使用方法。

1.内核文件中使用milestone()函数创建进度条

1.1基本语法

  • milestone(message,percent)                      #以百分比的形式显示进度
  • milestone(message,object,done,total)       #同时以数量和百分比显示进度

其中,message代表在提示区的提示消息,percent为百分比的整数部分,object为元素的计量单位,done表示动作已完成数量,total代表需要完成的动作总数。

1.2 实例展示

1.3 操作方法

任意打开一个模型文件:

运行脚本文件:

# -* - coding:UTF-8 -*-
p=mdb.models['Model-1'].parts['Part-1']
e=p.elements
N=len(e)
k=0
for e1 in e:
    print e1.label
    k=k+1
    milestone('已完成打印百分比为',100*k/N)

对代码进行修改:

# -* - coding:UTF-8 -*-
p=mdb.models['Model-1'].parts['Part-1']
e=p.elements
N=len(e)
k=0
for e1 in e:
    print e1.label
    k=k+1
    milestone('单元号打印进度:','个',k,N)

1.4 注意事项

milestone()函数适用于任何可计量的内核执行程序,使用方法简单快捷。

但是当同时使用两个milestone(函数时,会出现由于两个进度条叠加引起的闪烁,在编写程序时,应避免此类问题。

2.在图形界面中用AFXProgressBar创建进度条控件

该类型进度条控件无法在RSG对话框构造器中直接创建,需要用户自己编写GUI命令来实现。其创建方法如下。

2.1 基本语法

AFXProgressBar(p, tgt=None, sel=0, opts=FRAME_SUNKEN|FRAME_THICK,x=0,y=0,w=0, h=0,pl=DEFAULT_PAD, pr=DEFAULT_PAD, pt=DEFAULT_PAD, pb=DEFAULT_PAD)

其中 opts参数可以控制进度条的显示类型,AFXPROGRESSBAR_SCANNER代表扫描型,AFXPROGRESSBAR_ITERATOR代表迭代型,AFXPROGRESSBARPERCENTAGE表示百分比型。


2.2 实例展示

点击“开始读取”之后:

 

2.3 代码展示 

界面文件【testProgressBarDB.py】

# -* - coding:UTF-8 -*-
from abaqusConstants import *
from abaqusGui import *
from kernelAccess import mdb, session
import os
thisPath = os.path.abspath(__file__)
thisDir = os.path.dirname(thisPath)
class testProgressBarDB(AFXDataDialog):
    ID_START = AFXDataDialog.ID_LAST
    def __init__(self, form):
        AFXDataDialog.__init__(self, form, '测试进度条',
            self.OK|self.CANCEL, DECOR_RESIZE|DIALOG_ACTIONS_SEPARATOR)
        #主窗口
        
        FXButton(self, '开始读取', None, self, self.ID_START)
        #创建按钮
        
        FXMAPFUNC(self, SEL_COMMAND, self.ID_START, testProgressBarDB.onDoSomething)
        #消息映射
        
        self.scannerDB = ScannerDB(self)
    
    #定义执行函数
    def onDoSomething(self, sender, sel, ptr):
        self.scannerDB.create()   #生成进度条
        self.scannerDB.showModal(self)
        getAFXApp().repaint()
        files =[]  #定义一个空列表
        for i in range(1,10000):
            files.append('file_%d.txt' % (i))  #往列表里添加元素
        N=len(files)  #获取列表的长度
        self.scannerDB.setTotal(N)  #调用setTotal函数设置进度条总进程数
        for i in range( 1, N+1 ):
            self.scannerDB.setProgress(i)        #setProgress实时刷新进度条显示值
        self.scannerDB.hide()
        
class ScannerDB(AFXDialog):
    def __init__(self, owner):
        AFXDialog.__init__(self, owner, '显示进度', 
            0, 0, DIALOG_ACTIONS_NONE)           #创建对话框
        self.scanner = AFXProgressBar(self, None, 0, 
            LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|
            FRAME_SUNKEN|FRAME_THICK|AFXPROGRESSBAR_ITERATOR, 
            0, 0, 200, 22)              #创建迭代型进度条
        self.scanner2 = AFXProgressBar(self, None, 0, 
            LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|
            FRAME_SUNKEN|FRAME_THICK|AFXPROGRESSBAR_PERCENTAGE, 
            0, 0, 200, 22)              #创建百分比型进度条
        '''
        self.scanner3 = AFXProgressBar(self, None, 0,            
            LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|
            FRAME_SUNKEN|FRAME_THICK|AFXPROGRESSBAR_SCANNER, 
            0, 0, 200, 22)              #创建扫描型进度条
        '''
    def setTotal(self, total):
        self.scanner.setTotal(total)
        self.scanner2.setTotal(total)
        #SCANNER型进度条无需设置
    def setProgress(self, progress):
        self.scanner.setProgress(progress)
        self.scanner2.setProgress(progress)
        #SCANNER型进度条无需设置

注册文件【testProgressBar_plugin.py】

# -* - coding:UTF-8 -*-
from abaqusGui import *
from abaqusConstants import ALL
import osutils, os


###########################################################################
# Class definition
###########################################################################

class testProgressBar_plugin(AFXForm):

    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    def __init__(self, owner):
        
        # Construct the base class.
        #
        AFXForm.__init__(self, owner)
        self.radioButtonGroups = {}

        self.cmd = AFXGuiCommand(mode=self, method='',
            objectName='', registerQuery=False)
        pickedDefault = ''

    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    def getFirstDialog(self):

        import testProgressBarDB
        return testProgressBarDB.testProgressBarDB(self)

    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    def doCustomChecks(self):

        # Try to set the appropriate radio button on. If the user did
        # not specify any buttons to be on, do nothing.
        #
        for kw1,kw2,d in self.radioButtonGroups.values():
            try:
                value = d[ kw1.getValue() ]
                kw2.setValue(value)
            except:
                pass
        return True

    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    def okToCancel(self):

        # No need to close the dialog when a file operation (such
        # as New or Open) or model change is executed.
        #
        return False

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Register the plug-in
#
thisPath = os.path.abspath(__file__)
thisDir = os.path.dirname(thisPath)

toolset = getAFXApp().getAFXMainWindow().getPluginToolset()
toolset.registerGuiMenuButton(
    buttonText='Test ProgressBar', 
    object=testProgressBar_plugin(toolset),
    messageId=AFXMode.ID_ACTIVATE,
    icon=None,
    kernelInitString='',
    applicableModules=ALL,
    version='N/A',
    author='N/A',
    description='N/A',
    helpUrl='N/A'
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是刃小木啦~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值