完整的应用程序应包含警告提示、错误提示及信息提示灯机制,提示信息可以辅助用户正确地应用软件,避免不必要的操作失误。下面将介绍Abaqus二次开发中常用的提示方法。
一、警告提示框
警告并非错误,警告是在没有反不可饶恕的错误下的提示。注意使用场合。
1.1 语法
showAFXWarningDialog(owner, message, buttonIds=YES[NO|CANCEL, tgt=None, scl=0)
1.2 示例
1.3 代码展示
界面文件【testwarningdialog_standardDB.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 definition
###########################################################################
class testwarningdialog_standardDB(AFXDataDialog):
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def __init__(self, form):
# Construct the base class.
#
AFXDataDialog.__init__(self, form, '创建带孔板',
self.OK|self.CANCEL, DIALOG_ACTIONS_SEPARATOR)
okBtn = self.getActionButton(self.ID_CLICKED_OK)
okBtn.setText('OK')
GroupBox_1 = FXGroupBox(p=self, text='', opts=FRAME_GROOVE)
AFXTextField(p=GroupBox_1, ncols=12, labelText='name:', tgt=form.partnameKw, sel=0)
AFXTextField(p=GroupBox_1, ncols=12, labelText='Width (w):', tgt=form.widthKw, sel=0)
AFXTextField(p=GroupBox_1, ncols=12, labelText='height(h):', tgt=form.heightKw, sel=0)
AFXTextField(p=GroupBox_1, ncols=12, labelText='radius(r):', tgt=form.radiusKw, sel=0)
GroupBox_2 = FXGroupBox(p=self, text='Diagram', opts=FRAME_GROOVE)
fileName = os.path.join(thisDir, r'platewithhole.png')
icon = afxCreatePNGIcon(fileName)
FXLabel(p=GroupBox_2, text='', ic=icon)
注册文件【testwarningdialog_standard_plugin.py】
# -* - coding:UTF-8 -*-
from abaqusGui import *
from abaqusConstants import ALL
import osutils, os
class testwarningdialog_standard_plugin(AFXForm):
[
ID_WARNING,
] = range(AFXForm.ID_LAST, AFXForm.ID_LAST+1)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def __init__(self, owner):
# Construct the base class.
#
AFXForm.__init__(self, owner)
FXMAPFUNC(self, SEL_COMMAND, self.ID_WARNING,
testwarningdialog_standard_plugin.onCmdWarning)
self.radioButtonGroups = {}
self.cmd = AFXGuiCommand(mode=self, method='testoptionbutton',
objectName='testModul', registerQuery=False)
pickedDefault = ''
self.partnameKw = AFXStringKeyword(self.cmd, 'partname', True, 'pp')
self.widthKw = AFXFloatKeyword(self.cmd, 'width', True, 50)
self.heightKw = AFXFloatKeyword(self.cmd, 'height', True, 50)
self.radiusKw = AFXFloatKeyword(self.cmd, 'radius', True, 2)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def getFirstDialog(self):
import testwarningdialog_standardDB
return testwarningdialog_standardDB.testwarningdialog_standardDB(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.
# if self.radiusKw.getValue()<0:
# showAFXErrorDialog(getAFXApp().getAFXMainWindow(),
# 'radius must be lager than zero.')
# return False
# else:
# return True
if self.radiusKw.getValue()<0:
showAFXWarningDialog( self.getCurrentDialog(),
'您输入的半径值为负数,确定继续吗?',
AFXDialog.YES | AFXDialog.NO | AFXDialog.CANCEL,
self, self.ID_WARNING)
return False
else:
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
def onCmdWarning(self, sender, sel, ptr):
print 'haha'
if sender.getPressedButtonId() == \
AFXDialog.ID_CLICKED_YES:
self.issueCommands()
elif sender.getPressedButtonId() == \
AFXDialog.ID_CLICKED_NO:
self.deactivate()
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Register the plug-in
#
thisPath = os.path.abspath(__file__)
thisDir = os.path.dirname(thisPath)
toolset = getAFXApp().getAFXMainWindow().getPluginToolset()
toolset.registerGuiMenuButton(
buttonText='testwarningdialog_standard',
object=testwarningdialog_standard_plugin(toolset),
messageId=AFXMode.ID_ACTIVATE,
icon=None,
kernelInitString='import testModul',
applicableModules=ALL,
version='N/A',
author='N/A',
description='N/A',
helpUrl='N/A'
)
核心处理文件【testModul.py】
# -* - coding:UTF-8 -*-
from abaqus import *
from abaqusConstants import *
def testoptionbutton(partname, width, height, radius):
mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(0.0, 0.0),
point2=(width, height))
mdb.models['Model-1'].sketches['__profile__'].CircleByCenterPerimeter(center=(
width/2, height/2), point1=(width/2+radius, height/2))
mdb.models['Model-1'].Part(dimensionality=THREE_D, name=partname, type=
DEFORMABLE_BODY)
mdb.models['Model-1'].parts[partname].BaseShell(sketch=
mdb.models['Model-1'].sketches['__profile__'])
p = mdb.models['Model-1'].parts[partname]
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
二、错误提示框
2.1 语法
showAFXErrorDialog(owner,message,tgt=None, sel=0)
2.2 实例
2.3 代码
和1.3相比,仅仅是在注册文件中有少量改动:
三、信息提示框
语法:
showAFXInformationDialog(owner, message,tgt=None, sel=0)
和前面一样,也是在注册文件中稍作修改即可,这里不再赘述。
功能是弹出一个提示窗口。