New submission from zouguangxian:
modulator may be outdated. i made a changement to make it use the new
feature of PyTypeObject in Python2.5.
for example, to support members, methods, new, init and etc.
----------
components: Demos and Tools
files: modulator.patch
messages: 57533
nosy: weck
severity: normal
status: open
title: make modulator more general
type: compile error
versions: Python 2.5
Added file: http://bugs.python.org/file8755/modulator.patch
__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1450>
__________________________________
Index: genmodule.py
===================================================================
--- genmodule.py (revision 58978)
+++ genmodule.py (working copy)
@@ -27,7 +27,9 @@
# Names of functions in the object-description struct.
#
FUNCLIST = ['new', 'tp_dealloc', 'tp_print', 'tp_getattr', 'tp_setattr',
- 'tp_compare', 'tp_repr', 'tp_hash', 'tp_call', 'tp_str']
+ 'tp_compare', 'tp_repr', 'tp_hash', 'tp_call', 'tp_str',
+ 'tp_methods', 'tp_members', 'tp_init', 'tp_new', 'tp_traverse',
+ 'tp_clear']
TYPELIST = ['tp_as_number', 'tp_as_sequence', 'tp_as_mapping', 'structure']
#
@@ -92,6 +94,7 @@
self.typelist = []
self.methodlist = []
self.funclist = ['new']
+ self.memberlist = []
writer.__init__(self)
def writecode(self, fp):
@@ -100,10 +103,36 @@
self.writebody(fp)
def writehead(self, fp):
+ saved = self.memberlist
+ new_ml = ''
+ for fn in self.memberlist:
+ self.member = fn
+ new_ml = new_ml + (
+ 'XXX %s;\n'
+ %(fn))
+ self.memberlist = new_ml
self.addcode('object_head', fp)
+ self.memberlist = saved
def writebody(self, fp):
new_ml = ''
+ for fn in self.memberlist:
+ self.member = fn
+ print 'member', fn
+ self.addcode('object_member', fp)
+ new_ml = new_ml + (
+ '{"%s",\tT_XXX,
offsetof(%sObject,%s),\t0,\t%s_%s__doc__},\n'
+ %(fn, self.abbrev, fn, self.abbrev, fn))
+ self.memberlist = new_ml
+
+ if len(self.memberlist) > 0 :
+ self.addcode('object_mlist2', fp)
+
+ # Add tp_members if we have methods
+ if self.memberlist and not 'tp_members' in self.funclist:
+ self.funclist.insert(0, 'tp_members')
+
+ new_ml = ''
for fn in self.methodlist:
self.method = fn
self.addcode('object_method', fp)
@@ -113,9 +142,9 @@
self.methodlist = new_ml
self.addcode('object_mlist', fp)
- # Add getattr if we have methods
- if self.methodlist and not 'tp_getattr' in self.funclist:
- self.funclist.insert(0, 'tp_getattr')
+ # Add tp_methods if we have methods
+ if self.methodlist and not 'tp_methods' in self.funclist:
+ self.funclist.insert(0, 'tp_methods')
for fn in FUNCLIST:
setattr(self, fn, '0')
@@ -133,6 +162,13 @@
self.funclist.remove('tp_setattr')
self.tp_getattr = self.abbrev + '_getattr'
self.tp_setattr = self.abbrev + '_setattr'
+
+ if 'tp_dealloc' in self.funclist:
+ if 'tp_traverse' not in self.funclist:
+ self.funclist.insert(0, 'tp_traverse')
+ if 'tp_clear' not in self.funclist:
+ self.funclist.insert(0, 'tp_clear')
+
for fn in self.funclist:
self.addcode('object_'+fn, fp)
setattr(self, fn, '%s_%s'%(self.abbrev, fn[3:]))
Index: modulator.py
===================================================================
--- modulator.py (revision 58978)
+++ modulator.py (working copy)
@@ -18,7 +18,7 @@
import sys, os
if os.name <> 'mac':
- sys.path.append(os.path.join(os.environ['HOME'],
+ sys.path.append(os.path.join(os.environ['HOMEPATH'],
'src/python/Tools/modulator'))
from Tkinter import *
@@ -108,7 +108,14 @@
if not fn:
return
+ root, ext = os.path.splitext(fn)
+
fp = open(fn, 'w')
+ pycode = pycode + """\n
+fp = open('%s', 'w')
+genmodule.write(fp, m)
+fp.close()
+""" % ( root + '.c' )
fp.write(pycode)
fp.close()
@@ -210,7 +217,7 @@
raise oops
def gencode(self, name, objects):
- rv = ''
+ rv = 'import genmodule\n'
self.synchronize()
for o in objects:
o.synchronize()
Index: Templates/copyright
===================================================================
--- Templates/copyright (revision 58978)
+++ Templates/copyright (working copy)
@@ -0,0 +1,3 @@
+// WePlay Inc.
+//
+
Index: Templates/module_head
===================================================================
--- Templates/module_head (revision 58978)
+++ Templates/module_head (working copy)
@@ -1,6 +1,4 @@
#include "Python.h"
-static PyObject *ErrorObject;
-
/* ----------------------------------------------------- */
Index: Templates/module_tail
===================================================================
--- Templates/module_tail (revision 58978)
+++ Templates/module_tail (working copy)
@@ -13,7 +13,7 @@
""
;
-void
+PyMODINIT_FUNC
init$name$()
{
PyObject *m, *d;
@@ -24,9 +24,8 @@
(PyObject*)NULL,PYTHON_API_VERSION);
/* Add some symbolic constants to the module */
- d = PyModule_GetDict(m);
- ErrorObject = PyString_FromString("$name$.error");
- PyDict_SetItemString(d, "error", ErrorObject);
+ Py_INCREF(&$abbrev$Type);
+ PyModule_AddObject(m, "$abbrev$", (PyObject *)&$abbrev$Type);
/* XXXX Add constants here */
Index: Templates/object_head
===================================================================
--- Templates/object_head (revision 58978)
+++ Templates/object_head (working copy)
@@ -3,10 +3,11 @@
typedef struct {
PyObject_HEAD
+ $memberlist$
/* XXXX Add your own stuff here */
-} $abbrev$object;
+} $abbrev$Object;
-static PyTypeObject $Abbrev$type;
+extern static PyTypeObject $Abbrev$Type;
Index: Templates/object_member
===================================================================
--- Templates/object_member (revision 0)
+++ Templates/object_member (revision 0)
@@ -0,0 +1,5 @@
+
+static char $abbrev$_$member$__doc__[] =
+""
+;
+
Index: Templates/object_method
===================================================================
--- Templates/object_method (revision 58978)
+++ Templates/object_method (working copy)
@@ -4,11 +4,14 @@
;
static PyObject *
-$abbrev$_$method$($abbrev$object *self, PyObject *args)
+$abbrev$_$method$($abbrev$Object *self, PyObject *args)
{
+ PyObject* retval = Py_None;
+
if (!PyArg_ParseTuple(args, ""))
return NULL;
- Py_INCREF(Py_None);
- return Py_None;
+
+ Py_INCREF(retval);
+ return retval;
}
Index: Templates/object_mlist2
===================================================================
--- Templates/object_mlist2 (revision 0)
+++ Templates/object_mlist2 (revision 0)
@@ -0,0 +1,8 @@
+
+static struct PyMemberDef $abbrev$_members[] = {
+ $memberlist$
+ {NULL, NULL} /* sentinel */
+};
+
+/* ---------- */
+
Index: Templates/object_new
===================================================================
--- Templates/object_new (revision 58978)
+++ Templates/object_new (working copy)
@@ -1,10 +1,10 @@
-static $abbrev$object *
-new$abbrev$object()
+static $abbrev$Object *
+new$abbrev$Object()
{
- $abbrev$object *self;
+ $abbrev$Object *self;
- self = PyObject_NEW($abbrev$object, &$Abbrev$type);
+ self = PyObject_NEW($abbrev$Object, & $Abbrev$Type);
if (self == NULL)
return NULL;
/* XXXX Add your own initializers here */
Index: Templates/object_structure
===================================================================
--- Templates/object_structure (revision 58978)
+++ Templates/object_structure (working copy)
@@ -12,7 +12,7 @@
};
static PyObject *
-$abbrev$_getattr($abbrev$object *self, char *name)
+$abbrev$_getattr($abbrev$Object *self, char *name)
{
PyObject *rv;
@@ -26,7 +26,7 @@
static int
-$abbrev$_setattr($abbrev$object *self, char *name, PyObject *v)
+$abbrev$_setattr($abbrev$Object *self, char *name, PyObject *v)
{
/* XXXX Add your own setattr code here */
if ( v == NULL ) {
Index: Templates/object_tail
===================================================================
--- Templates/object_tail (revision 58978)
+++ Templates/object_tail (working copy)
@@ -1,19 +1,19 @@
-static char $Abbrev$type__doc__[] =
+static char $Abbrev$Type__doc__[] =
""
;
-static PyTypeObject $Abbrev$type = {
+static PyTypeObject $Abbrev$Type = {
PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/
"$name$", /*tp_name*/
- sizeof($abbrev$object), /*tp_basicsize*/
+ sizeof($abbrev$Object), /*tp_basicsize*/
0, /*tp_itemsize*/
/* methods */
(destructor)$tp_dealloc$, /*tp_dealloc*/
(printfunc)$tp_print$, /*tp_print*/
- (getattrfunc)$tp_getattr$, /*tp_getattr*/
- (setattrfunc)$tp_setattr$, /*tp_setattr*/
+ (getattrfunc)0, /*tp_getattr*/
+ (setattrfunc)0, /*tp_setattr*/
(cmpfunc)$tp_compare$, /*tp_compare*/
(reprfunc)$tp_repr$, /*tp_repr*/
$tp_as_number$, /*tp_as_number*/
@@ -24,8 +24,32 @@
(reprfunc)$tp_str$, /*tp_str*/
/* Space for future expansion */
- 0L,0L,0L,0L,
- $Abbrev$type__doc__ /* Documentation string */
+
+ (getattrofunc)$tp_getattro$, /*tp_getattro*/
+ (setattrofunc)$tp_setattro$, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
/*tp_flags*/
+
+ $Abbrev$Type__doc__, /* Documentation string */
+
+ (traverseproc)$tp_traverse$, /* tp_traverse */
+ (inquiry)$tp_clear$, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ $tp_methods$, /* tp_methods */
+ $tp_members$, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)$tp_init$, /* tp_init */
+ 0, /* tp_alloc */
+ $tp_new$, /* tp_new */
+
};
/* End of code for $name$ objects */
Index: Templates/object_tp_as_mapping
===================================================================
--- Templates/object_tp_as_mapping (revision 58978)
+++ Templates/object_tp_as_mapping (working copy)
@@ -2,19 +2,19 @@
/* Code to access $name$ objects as mappings */
static int
-$abbrev$_length($abbrev$object *self)
+$abbrev$_length($abbrev$Object *self)
{
/* XXXX Return the size of the mapping */
}
static PyObject *
-$abbrev$_subscript($abbrev$object *self, PyObject *key)
+$abbrev$_subscript($abbrev$Object *self, PyObject *key)
{
/* XXXX Return the item of self indexed by key */
}
static int
-$abbrev$_ass_sub($abbrev$object *self, PyObject *v, PyObject *w)
+$abbrev$_ass_sub($abbrev$Object *self, PyObject *v, PyObject *w)
{
/* XXXX Put w in self under key v */
return 0;
Index: Templates/object_tp_as_number
===================================================================
--- Templates/object_tp_as_number (revision 58978)
+++ Templates/object_tp_as_number (working copy)
@@ -2,103 +2,103 @@
/* Code to access $name$ objects as numbers */
static PyObject *
-$abbrev$_add($abbrev$object *v, $abbrev$object *w)
+$abbrev$_add($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX Add them */
}
static PyObject *
-$abbrev$_sub($abbrev$object *v, $abbrev$object *w)
+$abbrev$_sub($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX Subtract them */
}
static PyObject *
-$abbrev$_mul($abbrev$object *v, $abbrev$object *w)
+$abbrev$_mul($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX Multiply them */
}
static PyObject *
-$abbrev$_div($abbrev$object *x, $abbrev$object *y)
+$abbrev$_div($abbrev$Object *x, $abbrev$Object *y)
{
/* XXXX Divide them */
}
static PyObject *
-$abbrev$_mod($abbrev$object *x, $abbrev$object *y)
+$abbrev$_mod($abbrev$Object *x, $abbrev$Object *y)
{
/* XXXX Modulo them */
}
static PyObject *
-$abbrev$_divmod($abbrev$object *x, $abbrev$object *y)
+$abbrev$_divmod($abbrev$Object *x, $abbrev$Object *y)
{
/* XXXX Return 2-tuple with div and mod */
}
static PyObject *
-$abbrev$_pow($abbrev$object *v, $abbrev$object *w, $abbrev$object *z)
+$abbrev$_pow($abbrev$Object *v, $abbrev$Object *w, $abbrev$Object *z)
{
/* XXXX */
}
static PyObject *
-$abbrev$_neg($abbrev$object *v)
+$abbrev$_neg($abbrev$Object *v)
{
/* XXXX */
}
static PyObject *
-$abbrev$_pos($abbrev$object *v)
+$abbrev$_pos($abbrev$Object *v)
{
/* XXXX */
}
static PyObject *
-$abbrev$_abs($abbrev$object *v)
+$abbrev$_abs($abbrev$Object *v)
{
/* XXXX */
}
static int
-$abbrev$_nonzero($abbrev$object *v)
+$abbrev$_nonzero($abbrev$Object *v)
{
/* XXXX Return 1 if non-zero */
}
static PyObject *
-$abbrev$_invert($abbrev$object *v)
+$abbrev$_invert($abbrev$Object *v)
{
/* XXXX */
}
static PyObject *
-$abbrev$_lshift($abbrev$object *v, $abbrev$object *w)
+$abbrev$_lshift($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX */
}
static PyObject *
-$abbrev$_rshift($abbrev$object *v, $abbrev$object *w)
+$abbrev$_rshift($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX */
}
static PyObject *
-$abbrev$_and($abbrev$object *v, $abbrev$object *w)
+$abbrev$_and($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX */
}
static PyObject *
-$abbrev$_xor($abbrev$object *v, $abbrev$object *w)
+$abbrev$_xor($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX */
}
static PyObject *
-$abbrev$_or($abbrev$object *v, $abbrev$object *w)
+$abbrev$_or($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX */
}
@@ -111,31 +111,31 @@
}
static PyObject *
-$abbrev$_int($abbrev$object *v)
+$abbrev$_int($abbrev$Object *v)
{
/* XXXX */
}
static PyObject *
-$abbrev$_long($abbrev$object *v)
+$abbrev$_long($abbrev$Object *v)
{
/* XXXX */
}
static PyObject *
-$abbrev$_float($abbrev$object *v)
+$abbrev$_float($abbrev$Object *v)
{
/* XXXX */
}
static PyObject *
-$abbrev$_oct($abbrev$object *v)
+$abbrev$_oct($abbrev$Object *v)
{
/* XXXX Return object as octal stringobject */
}
static PyObject *
-$abbrev$_hex($abbrev$object *v)
+$abbrev$_hex($abbrev$Object *v)
{
/* XXXX Return object as hex stringobject */
}
Index: Templates/object_tp_as_sequence
===================================================================
--- Templates/object_tp_as_sequence (revision 58978)
+++ Templates/object_tp_as_sequence (working copy)
@@ -2,37 +2,37 @@
/* Code to handle accessing $name$ objects as sequence objects */
static int
-$abbrev$_length($abbrev$object *self)
+$abbrev$_length($abbrev$Object *self)
{
/* XXXX Return the size of the object */
}
static PyObject *
-$abbrev$_concat($abbrev$object *self, PyObject *bb)
+$abbrev$_concat($abbrev$Object *self, PyObject *bb)
{
/* XXXX Return the concatenation of self and bb */
}
static PyObject *
-$abbrev$_repeat($abbrev$object *self, int n)
+$abbrev$_repeat($abbrev$Object *self, int n)
{
/* XXXX Return a new object that is n times self */
}
static PyObject *
-$abbrev$_item($abbrev$object *self, int i)
+$abbrev$_item($abbrev$Object *self, int i)
{
/* XXXX Return the i-th object of self */
}
static PyObject *
-$abbrev$_slice($abbrev$object *self, int ilow, int ihigh)
+$abbrev$_slice($abbrev$Object *self, int ilow, int ihigh)
{
/* XXXX Return the ilow..ihigh slice of self in a new object */
}
static int
-$abbrev$_ass_item($abbrev$object *self, int i, PyObject *v)
+$abbrev$_ass_item($abbrev$Object *self, int i, PyObject *v)
{
/* XXXX Assign to the i-th element of self */
return 0;
Index: Templates/object_tp_call
===================================================================
--- Templates/object_tp_call (revision 58978)
+++ Templates/object_tp_call (working copy)
@@ -1,6 +1,6 @@
static PyObject *
-$abbrev$_call($abbrev$object *self, PyObject *args, PyObject *kwargs)
+$abbrev$_call($abbrev$Object *self, PyObject *args, PyObject *kwargs)
{
/* XXXX Return the result of calling self with argument args */
}
Index: Templates/object_tp_clear
===================================================================
--- Templates/object_tp_clear (revision 0)
+++ Templates/object_tp_clear (revision 0)
@@ -0,0 +1,6 @@
+
+static int
+$abbrev$_clear($abbrev$Object *self)
+{
+ /* XXXX Add your own cleanup code here */
+}
Index: Templates/object_tp_compare
===================================================================
--- Templates/object_tp_compare (revision 58978)
+++ Templates/object_tp_compare (working copy)
@@ -1,6 +1,6 @@
static int
-$abbrev$_compare($abbrev$object *v, $abbrev$object *w)
+$abbrev$_compare($abbrev$Object *v, $abbrev$Object *w)
{
/* XXXX Compare objects and return -1, 0 or 1 */
}
Index: Templates/object_tp_dealloc
===================================================================
--- Templates/object_tp_dealloc (revision 58978)
+++ Templates/object_tp_dealloc (working copy)
@@ -1,7 +1,9 @@
static void
-$abbrev$_dealloc($abbrev$object *self)
+$abbrev$_dealloc($abbrev$Object *self)
{
+ $abbrev$_clear(self);
+
/* XXXX Add your own cleanup code here */
- PyMem_DEL(self);
+ PyObject_DEL(self);
}
Index: Templates/object_tp_getattr
===================================================================
--- Templates/object_tp_getattr (revision 58978)
+++ Templates/object_tp_getattr (working copy)
@@ -1,7 +1,8 @@
static PyObject *
-$abbrev$_getattr($abbrev$object *self, char *name)
+$abbrev$_getattr($abbrev$Object *self, char *name)
{
/* XXXX Add your own getattr code here */
- return Py_FindMethod($abbrev$_methods, (PyObject *)self, name);
+
+ return PyObject_GetAttrString( self, name );
}
Index: Templates/object_tp_getattro
===================================================================
--- Templates/object_tp_getattro (revision 0)
+++ Templates/object_tp_getattro (revision 0)
@@ -0,0 +1,8 @@
+
+static PyObject *
+$abbrev$_getattro($abbrev$Object *self, PyObject *name)
+{
+ /* XXXX Add your own getattro code here */
+
+ return PyObject_GenericGetAttr((PyObject *)self, name);
+}
Index: Templates/object_tp_hash
===================================================================
--- Templates/object_tp_hash (revision 58978)
+++ Templates/object_tp_hash (working copy)
@@ -1,6 +1,6 @@
static long
-$abbrev$_hash($abbrev$object *self)
+$abbrev$_hash($abbrev$Object *self)
{
/* XXXX Return a hash of self (or -1) */
}
Index: Templates/object_tp_init
===================================================================
--- Templates/object_tp_init (revision 0)
+++ Templates/object_tp_init (revision 0)
@@ -0,0 +1,12 @@
+
+static int
+$abbrev$_init($abbrev$Object *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {NULL};
+
+ if (! PyArg_ParseTupleAndKeywords(args, kwds, "", kwlist))
+ return -1;
+
+ return 0;
+}
+
Index: Templates/object_tp_members
===================================================================
--- Templates/object_tp_members (revision 0)
+++ Templates/object_tp_members (revision 0)
@@ -0,0 +1 @@
+
Index: Templates/object_tp_methods
===================================================================
--- Templates/object_tp_methods (revision 0)
+++ Templates/object_tp_methods (revision 0)
@@ -0,0 +1 @@
+
Index: Templates/object_tp_new
===================================================================
--- Templates/object_tp_new (revision 0)
+++ Templates/object_tp_new (revision 0)
@@ -0,0 +1,14 @@
+
+static PyObject *
+$abbrev$_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ $abbrev$Object *self;
+
+ self = PyObject_New( $abbrev$Object, type );
+ if (self != NULL) {
+ /* XXXX Add code here to put self into s */
+ }
+
+ return (PyObject *)self;
+}
+
Index: Templates/object_tp_print
===================================================================
--- Templates/object_tp_print (revision 58978)
+++ Templates/object_tp_print (working copy)
@@ -1,6 +1,6 @@
static int
-$abbrev$_print($abbrev$object *self, FILE *fp, int flags)
+$abbrev$_print($abbrev$Object *self, FILE *fp, int flags)
{
/* XXXX Add code here to print self to fp */
return 0;
Index: Templates/object_tp_repr
===================================================================
--- Templates/object_tp_repr (revision 58978)
+++ Templates/object_tp_repr (working copy)
@@ -1,6 +1,6 @@
static PyObject *
-$abbrev$_repr($abbrev$object *self)
+$abbrev$_repr($abbrev$Object *self)
{
PyObject *s;
Index: Templates/object_tp_setattr
===================================================================
--- Templates/object_tp_setattr (revision 58978)
+++ Templates/object_tp_setattr (working copy)
@@ -1,9 +1,10 @@
static int
-$abbrev$_setattr($abbrev$object *self, char *name, PyObject *v)
+$abbrev$_setattr($abbrev$Object *self, char *name, PyObject *v)
{
/* Set attribute 'name' to value 'v'. v==NULL means delete */
/* XXXX Add your own setattr code here */
- return -1;
+
+ return PyObject_SetAttrString( self, name, v );
}
Index: Templates/object_tp_setattro
===================================================================
--- Templates/object_tp_setattro (revision 0)
+++ Templates/object_tp_setattro (revision 0)
@@ -0,0 +1,10 @@
+
+static int
+$abbrev$_setattro($abbrev$Object *self, PyObject *name, PyObject *v)
+{
+ /* Set attribute 'name' to value 'v'. v==NULL means delete */
+
+ /* XXXX Add your own setattro code here */
+
+ return PyObject_GenericSetAttr((PyObject *)self, name, v);
+}
Index: Templates/object_tp_str
===================================================================
--- Templates/object_tp_str (revision 58978)
+++ Templates/object_tp_str (working copy)
@@ -1,6 +1,6 @@
static PyObject *
-$abbrev$_str($abbrev$object *self)
+$abbrev$_str($abbrev$Object *self)
{
PyObject *s;
Index: Templates/object_tp_traverse
===================================================================
--- Templates/object_tp_traverse (revision 0)
+++ Templates/object_tp_traverse (revision 0)
@@ -0,0 +1,7 @@
+
+static int
+$abbrev$_traverse($abbrev$Object *self)
+{
+ /* XXXX Add your own cleanup code here */
+ return 0;
+}
Index: Tkextra.py
===================================================================
--- Tkextra.py (revision 58978)
+++ Tkextra.py (working copy)
@@ -27,7 +27,7 @@
msg = Message(top,
{'width': '3i',
'text': text,
- 'font': '-Adobe-Times-Medium-R-Normal-*-180-*',
+ 'font': 'Times',
Pack: {'side': 'right', 'expand': 1,
'fill': 'both',
'padx': '3m', 'pady': '3m'}})
@@ -104,7 +104,7 @@
msg = Message(top,
{'width': '3i',
'text': text,
- 'font': '-Adobe-Times-Medium-R-Normal-*-180-*',
+ 'font': 'Times',
Pack: {'side': 'left',
'fill': 'both',
'padx': '3m', 'pady': '3m'}})
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com