Prev: Simple Button Using PyRegister Up: Examples Top: Top
MrmNcreateCallback
to enter the
widgets created by UIL into module __main__
's dictionary. This
is somewhat cleaner than having to find the UIL-created widgets using
NameToWidget
. The files involved are panel_cp.uil,
panel_cp.uid and panel_cp.py.
panel_cp.uil contains the following:
module cp_front_end
version = 'V1.0'
names = case_sensitive
procedure PyEval(string);
object main : XmBulletinBoard {
arguments {
XmNwidth = 300;
XmNheight = 400;
};
controls {
XmText src_file;
XmText dst_file;
XmPushButton button;
};
};
object src_file : XmText {
arguments {
XmNy = 0;
XmNx = 10;
XmNwidth = 280;
XmNheight = 40;
XmNeditMode = XmSINGLE_LINE_EDIT;
};
callbacks {
MrmNcreateCallback = procedure PyEval("OnCreate('src_file_w')");
XmNvalueChangedCallback = procedure PyEval("OnValueChanged()");
};
};
object dst_file : XmText {
arguments {
XmNy = 60;
XmNx = 10;
XmNwidth = 280;
XmNheight = 40;
XmNeditMode = XmSINGLE_LINE_EDIT;
};
callbacks {
MrmNcreateCallback = procedure PyEval("OnCreate('dst_file_w')");
XmNvalueChangedCallback = procedure PyEval("OnValueChanged()");
};
};
object button : XmPushButton {
arguments {
XmNy = 110;
XmNx = 10;
XmNwidth = 100;
XmNheight = 40;
XmNlabelString = 'Do Copy';
XmNsensitive = false;
};
callbacks {
MrmNcreateCallback = procedure PyEval("OnCreate('button_w')");
XmNactivateCallback = procedure PyEval("DoCopy()");
};
};
end module;
uil panel_cp.uil -o panel_cp.uid
#!/usr/local/bin/python
import posix, os, sys, Mrm, Xm, Xt
# -----------------------------------------
def OnCreate(name):
# insert name=__widget__ into __main__'s dictionary
sys.modules['__main__'].__dict__[name] = __widget__
# -----------------------------------------
def OnValueChanged():
if len(src_file_w.TextGetString()) > 0 and \
len(dst_file_w.TextGetString()) > 0:
button_w.sensitive = 1
else:
button_w.sensitive = 0
# -----------------------------------------
def DoCopy():
cmd = 'cp '
cmd = cmd + src_file_w.TextGetString()
cmd = cmd + ' '
cmd = cmd + dst_file_w.TextGetString()
print cmd
posix.system(cmd)
sys.exit()
# -----------------------------------------
def main():
top_level = Xt.Initialize()
mrm_hier = Mrm.OpenHierarchy("panel_cp.uid")
main_w = mrm_hier.FetchWidget("main", top_level)
main_w.ManageChild()
top_level.RealizeWidget()
Xt.MainLoop()
main()
OnCreate
MrmNcreateCallback
to access the __widget__
symbol and
insert an entry in the __main__
module's dictionary for the
XmText
and XmPushButton
widgets declared in the UIL.
This makes these widgets accessible as Python-wrapped widget objects
to the OnValueChanged
and OnCopy
callback routines,
without having to pass the widgets to these callbacks in the UIL tag
argument.
Another way to accomplish this is to insert the names into the
__main__
namespace explicitly in main()
, for example:
global src_file_w, dst_file_w
...
main_w = mrm_hier.FetchWidget("main", top_level)
src_file_w = main_w.NameToWidget('src_file')
dst_file_w = main_w.NameToWidget('dst_file')
NameToWidget
is used to find the widgets, obtain
Python wrapped widget objects, and initialize src_file_w and
dst_file_w global variables.