我有一个用类导入模块的按钮。 类(varClass)创建一个窗口。
如果我再次点击按钮,我试试这个:
if var:
var.toggleUI()
else :
var = varClass()
但var并没有'在打开Maya后第一次创建窗口时存在。我怎样才能使这个工作?
答案 0 :(得分:4)
您可以捕获NameError
例外:
try:
var.toggleUI()
except NameError:
var = varClass()
如果您还需要第一次拨打toggleUI
,请尝试使用名称:
try:
var
except NameError:
var = varClass()
var.toggleUI()
我不熟悉Maja,但如果您可以先在其他位置定义名称,只需将其设置为None
,那么您的代码也可以正常工作,如果不是更好的话。
答案 1 :(得分:4)
使用例外:
try:
var.toggleUI()
except NameError:
var = varClass()
var.toggleUI()
答案 2 :(得分:0)
如果您在按钮内执行此操作,则应将var
的管理权限卸载到您要导入的模块中。让模块处理实例化,按钮让模块完成繁重的工作。只要进口没有副作用(如果你正确地做对话就不应该有副作用),Rendundant进口不会受到伤害。
模块做了这样的事情:
class SampleGui(object):
# all sorts of good stuff here
_sample_gui_instance = None
def get_instance():
_sample_gui_instance = sample_gui_instance or SampleGui()
return _sample_gui_instance
按钮就是
import SampleGuiModule
SampleGuiModule.get_instance().toggleUI()
这与其他人的答案相同,但我认为通过将实例管理委派给模块,而不是按钮,您可以进行任何级别的复杂性或初始化并分享在透明按钮,热键或其他脚本之间。
我使用or
代替if... is None
保存了一些字符;由于某些原因,SampleGui
真值测试为假,这将是棘手的。但只有你强迫它才会这样做。
答案 3 :(得分:0)
您可以使用dir函数
a=5
'a' in dir()
'b' in dir()
这将打印
True
False
所以在你的情况下
if 'var' in dir():
var.toggleUI()
else :
var = varClass()
答案 4 :(得分:-3)
默认您的var
,并将其用作测试:
var = None
if var is None:
var = varClass()
var.toggleUI()