[PYTHON IMAGE-SIG] Using PIL with "stock" _tkinter.so

Fred L. Drake, Jr. Fred L. Drake, Jr." <fdrake@CNRI.Reston.Va.US
Tue, 20 May 1997 13:00:43 -0400 (EDT)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-824023566-864146766=:3781
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.GSO.3.96.970520124614.3781G@weyr>


  Some time ago, I asked about using Tk & PIL together with a "stock"
_tkinter.so.  Fredrik kindly invited me to have a go at it.  ;-)
  Well, I did, and it didn't take much time once I sat down to do it.
I've attached the two files needed to build the PIL/Tk support: a modified
copy of Tk/tkImaging.c (I added a module initialization function), and a
Tk/Setup.in file.
  In addition, the line:

	import _tkimaging

should be added to Lib/ImageTk.py; I added it immediately after the
existing import statement at the top of the file.
  To build this support, copy the file Misc/Makefile.pre.in from the
Python distribution into the Tk/ directory of the PIL distrinbution and
check the paths in Tk/Setup.in. Run the command:

	make -f Makefile.pre.in boot ; make

This will build a new module which does nothing more than register the PIL
integration code with the Tk PhotoImage support.  Copy _tkimagingmodule.so
and _imagingmodule.so to $exec_prefix/lib/python1.4/sharedmodules, and 
Lib/*.py from PIL to $prefix/lib/python1.4.  (Use the $prefix and
$exec_prefix from the Python build.)  Then you're all set!
  Here's what it's really doing:  The functions in Tk/tkImaging.c need to
have access to a couple of functions from the Tk library to do their work.
These are exported by whatever object is providing the library for
_tkinter.so.  Typically, the Tk library is statically linked into
_tkinter.so, but the symbols are exported.  The new module links to
_tkinter.so, which provides the needed entry points into the Tk library.
  If Tk is dynamically linked to _tkinter.so, _tkimagingmodule.so should
be linked to the dynamic Tk library rather than _tkinter.so; do this by
adjusting the Setup.in (or better yet, the generated Setup file) to
reflect this (see the TK variable).
  If Tk is statically linked to _tkinter.so but the Tk symbols are not
exported, you have to use the old method.  ;-(

  Enjoy!


  -Fred

--
Fred L. Drake, Jr.
fdrake@cnri.reston.va.us
Corporation for National Research Initiatives
1895 Preston White Drive
Reston, VA    20191-5434

---559023410-824023566-864146766=:3781
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="tkImaging.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.970520124606.3781D@weyr>
Content-Description: 

LyogJElkOiB0a0ltYWdpbmcuYyx2IDEuMSAxOTk2LzA1LzA5IDIyOjExOjM5
IGZyZWRyaWsgRXhwICQNCiAqDQogKiBUaGUgUHl0aG9uIEltYWdpbmcgTGli
cmFyeS4NCiAqDQogKiBGaWxlOg0KICoJdGtJbWFnaW5nLmMgLS0gYSBUSzQg
aW50ZXJmYWNlIGZvciBQeXRob24gSW1hZ2luZyBvYmplY3RzDQogKg0KICog
RGVzY3JpcHRpb246DQogKglDb3B5IChwYXJ0cyBvZikgYSBuYW1lZCBkaXNw
bGF5IG1lbW9yeSB0byBhIHBob3RvIGltYWdlIG9iamVjdC4NCiAqCUFsc28g
Y29udGFpbnMgY29kZSB0byBjcmVhdGUgYW4gZGlzcGxheSBtZW1vcnkuICBV
bmRlciBUaywgYQ0KICoJZGlzcGxheSBtZW1vcnkgaXMgc2ltcGx5IGFuICJM
IiBvciAiUkdCIiBpbWFnZSBtZW1vcnkgdGhhdCBpcw0KICoJYWxsb2NhdGVk
IGluIGEgc2luZ2xlIGJsb2NrLg0KICoNCiAqIAlUbyB1c2UgdGhpcyBtb2R1
bGUsIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciBUY2xfQXBwSW5p
dA0KICoJZnVuY3Rpb24gKGluIHRrYXBwaW5pdC5jKToNCiAqCQ0KICoJCWV4
dGVybiB2b2lkIFRrSW1hZ2luZ19Jbml0KHZvaWQpOw0KICoJCVRrSW1hZ2lu
Z19Jbml0KCk7DQogKg0KICoJVGhpcyByZWdpc3RlcnMgYSBpbWFnZSB0eXBl
IGNhbGxlZCAiUHlJbWFnaW5nQ29yZSIsIHdoaWNoIGlzDQogKgl1c2UgdG8g
Y29tbXVuaWNhdGUgYmV0d2VlbiBQSUwgYW5kIFRrJ3MgUGhvdG9JbWFnZSBo
YW5kbGVyLg0KICoNCiAqCUNvbXBpbGUgYW5kIGxpbmsgdGtJbWFnaW5nLmMg
d2l0aCB0a2FwcGluaXQuYyBhbmQgX3RraW50ZXINCiAqCShzZWUgdGhlIFNl
dHVwIGZpbGUgZm9yIGRldGFpbHMgb24gaG93IHRvIHVzZSB0a2FwcGluaXQu
YykuDQogKglOb3RlIHRoYXQgX3RraW50ZXIuYyBtdXN0IGJlIGNvbXBpbGVk
IHdpdGggV0lUSF9BUFBJTklULg0KICoNCiAqIEhpc3Rvcnk6DQogKgk5NS0w
OS0xMiBmbAlDcmVhdGVkDQogKgk5Ni0wNC0wOCBmbAlSZWFkeSBmb3IgcmVs
ZWFzZQ0KICoNCiAqIENvcHlyaWdodCAoYykgRnJlZHJpayBMdW5kaCAxOTk1
LTk2LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqLw0KDQoNCiNpbmNsdWRl
IDxzdGRsaWIuaD4NCg0KI2luY2x1ZGUgInRrLmgiDQoNCiNpbmNsdWRlICJJ
bWFnaW5nLmgiDQojaW5jbHVkZSAiUHl0aG9uLmgiDQoNCg0Kc3RhdGljIElt
YWdpbmcNCkltYWdpbmdGaW5kKGNvbnN0IGNoYXIqIG5hbWUpDQp7DQogICAg
bG9uZyBpZDsNCg0KICAgIC8qIEhhY2shICovDQogICAgaWQgPSBhdG9sKG5h
bWUpOw0KICAgIGlmICghaWQpDQoJcmV0dXJuIE5VTEw7DQoNCiAgICByZXR1
cm4gKEltYWdpbmcpIGlkOw0KfQ0KDQoNCnN0YXRpYyBpbnQNClN0cmluZ01h
dGNoSW1hZ2luZyhjaGFyKiBzdHJpbmcsIGNoYXIqIGZvcm1hdCwNCgkJICAg
aW50KiB3aWR0aF9vdXQsIGludCogaGVpZ2h0X291dCkNCnsNCiAgICBJbWFn
aW5nIGltOw0KDQogICAgaWYgKCFmb3JtYXQgfHwgc3RyY21wKGZvcm1hdCwg
IlB5SW1hZ2luZ0NvcmUiKSAhPSAwKQ0KCXJldHVybiAwOw0KDQogICAgLyog
SW1hZ2UgKi8NCiAgICBpbSA9IEltYWdpbmdGaW5kKHN0cmluZyk7DQogICAg
aWYgKCFpbSB8fCAhaW0tPmJsb2NrKQ0KCXJldHVybiAwOw0KDQogICAgKndp
ZHRoX291dCA9IGltLT54c2l6ZTsNCiAgICAqaGVpZ2h0X291dCA9IGltLT55
c2l6ZTsNCg0KICAgIHJldHVybiAxOw0KfQ0KDQoNCnN0YXRpYyBpbnQNClN0
cmluZ1JlYWRJbWFnaW5nKFRjbF9JbnRlcnAqIHRjbCwgY2hhciogc3RyaW5n
LA0KCQkgIGNoYXIqIGZvcm1hdCwgVGtfUGhvdG9IYW5kbGUgaW1hZ2UsDQoJ
CSAgaW50IGRlc3RfeG9mZnNldCwgaW50IGRlc3RfeW9mZnNldCwgaW50IHhz
aXplLA0KCQkgIGludCB5c2l6ZSwgaW50IHNyY194b2Zmc2V0LCBpbnQgc3Jj
X3lvZmZzZXQpDQp7DQogICAgSW1hZ2luZyBpbTsNCiAgICBUa19QaG90b0lt
YWdlQmxvY2sgYmxvY2s7DQoNCiAgICAvKiBJbWFnZSAqLw0KICAgIGltID0g
SW1hZ2luZ0ZpbmQoc3RyaW5nKTsNCiAgICBpZiAoIWltKSB7DQoJVGNsX0Fw
cGVuZFJlc3VsdCh0Y2wsICJCYWQgbmFtZSIsIChjaGFyKikgTlVMTCk7DQoJ
cmV0dXJuIFRDTF9FUlJPUjsNCiAgICB9DQogICAgaWYgKCFpbS0+YmxvY2sp
IHsNCglUY2xfQXBwZW5kUmVzdWx0KHRjbCwgIkJhZCBkaXNwbGF5IG1lbW9y
eSIsIChjaGFyKikgTlVMTCk7DQoJcmV0dXJuIFRDTF9FUlJPUjsNCiAgICB9
DQoNCiAgICAvKiBBY3RpdmUgcmVnaW9uICovDQogICAgaWYgKHNyY194b2Zm
c2V0ICsgeHNpemUgPiBpbS0+eHNpemUpDQoJeHNpemUgPSBpbS0+eHNpemUg
LSBzcmNfeG9mZnNldDsNCiAgICBpZiAoc3JjX3lvZmZzZXQgKyB5c2l6ZSA+
IGltLT55c2l6ZSkNCgl5c2l6ZSA9IGltLT55c2l6ZSAtIHNyY195b2Zmc2V0
Ow0KICAgIGlmICh4c2l6ZSA8IDAgfHwgeXNpemUgPCAwDQoJfHwgc3JjX3hv
ZmZzZXQgPj0gaW0tPnhzaXplDQoJfHwgc3JjX3lvZmZzZXQgPj0gaW0tPnlz
aXplKQ0KCXJldHVybiBUQ0xfT0s7DQoNCiAgICAvKiBNb2RlICovDQogICAg
aWYgKHN0cmNtcChpbS0+bW9kZSwgIjEiKSA9PSAwIHx8IHN0cmNtcChpbS0+
bW9kZSwgIkwiKSA9PSAwKSB7DQoJYmxvY2sucGl4ZWxTaXplID0gMTsNCgli
bG9jay5vZmZzZXRbMF0gPSBibG9jay5vZmZzZXRbMV0gPSBibG9jay5vZmZz
ZXRbMl0gPSAwOw0KICAgIH0gZWxzZSBpZiAoc3RyY21wKGltLT5tb2RlLCAi
UkdCIikgPT0gMCkgew0KCWJsb2NrLnBpeGVsU2l6ZSA9IDQ7DQoJYmxvY2su
b2Zmc2V0WzBdID0gMDsNCglibG9jay5vZmZzZXRbMV0gPSAxOw0KCWJsb2Nr
Lm9mZnNldFsyXSA9IDI7DQogICAgfSBlbHNlIHsNCglUY2xfQXBwZW5kUmVz
dWx0KHRjbCwgIkJhZCBtb2RlIiwgKGNoYXIqKSBOVUxMKTsNCglyZXR1cm4g
VENMX0VSUk9SOw0KICAgIH0NCg0KICAgIGJsb2NrLndpZHRoID0gaW0tPnhz
aXplOw0KICAgIGJsb2NrLmhlaWdodCA9IGltLT55c2l6ZTsNCiAgICBibG9j
ay5waXRjaCA9IGltLT5saW5lc2l6ZTsNCiAgICBibG9jay5waXhlbFB0ciA9
ICh1bnNpZ25lZCBjaGFyKikgaW0tPmJsb2NrICsNCgkgICAgICAgICAgICAg
c3JjX3lvZmZzZXQgKiBpbS0+bGluZXNpemUgKw0KCSAgICAgICAgICAgICBz
cmNfeG9mZnNldCAqIGltLT5waXhlbHNpemU7DQoNCiAgICAvKiBDb3B5IGJs
b2NrIHRvIHBob3RvIGltYWdlLCBhbmQgbGVhdmUgdGhlIHJlc3QgdG8gVEsg
Ki8NCiAgICBUa19QaG90b1B1dEJsb2NrKGltYWdlLCAmYmxvY2ssIGRlc3Rf
eG9mZnNldCwgZGVzdF95b2Zmc2V0LA0KCQkgICAgIHhzaXplLCB5c2l6ZSk7
DQoNCiAgICByZXR1cm4gVENMX09LOw0KfQ0KDQoNCi8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovDQovKiBJbnN0YWxsIGltYWdpbmcgcGhvdG9pbWFn
ZSBoYW5kbGVyICAqLw0KDQpzdGF0aWMgVGtfUGhvdG9JbWFnZUZvcm1hdCB0
a0ltYWdpbmcgPSB7DQogICAgIlB5SW1hZ2luZ0NvcmUiLA0KICAgIE5VTEws
DQogICAgU3RyaW5nTWF0Y2hJbWFnaW5nLA0KICAgIE5VTEwsDQogICAgU3Ry
aW5nUmVhZEltYWdpbmcsDQogICAgTlVMTCwNCiAgICBOVUxMDQp9Ow0KDQp2
b2lkDQpJbWFnaW5nVGtJbnN0YWxsKHZvaWQpDQp7DQogICAgLyogQ29tcGF0
aWJpbGl0eSB2ZXJzaW9uICovDQogICAgVGtfQ3JlYXRlUGhvdG9JbWFnZUZv
cm1hdCgmdGtJbWFnaW5nKTsNCn0NCg0Kdm9pZA0KVGtJbWFnaW5nX0luaXQo
dm9pZCkNCnsNCiAgICBUa19DcmVhdGVQaG90b0ltYWdlRm9ybWF0KCZ0a0lt
YWdpbmcpOw0KfQ0KDQoNCnN0YXRpYyBQeU1ldGhvZERlZiBmdW5jdGlvbnNb
XSA9IHsNCiAgICAvKiBubywgd2UgcmVhbGx5IGRvbid0IGhhdmUgYW55ISAq
Lw0KICAgIHtOVUxMLCBOVUxMfQkJCS8qIHNlbnRpbmVsICovDQp9Ow0KDQp2
b2lkIGluaXRfdGtpbWFnaW5nKHZvaWQpDQp7DQogICAgUHlPYmplY3QgKl90
a2ludGVyID0gTlVMTDsNCiAgICBQeU9iamVjdCAqX2ltYWdpbmcgPSBOVUxM
Ow0KICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOw0KDQogICAgX3RraW50
ZXIgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl90a2ludGVyIik7DQogICAg
aWYgKF90a2ludGVyID09IE5VTEwpDQoJcmV0dXJuOw0KICAgIFB5X0RFQ1JF
RihfdGtpbnRlcik7DQoNCiAgICBfaW1hZ2luZyA9IFB5SW1wb3J0X0ltcG9y
dE1vZHVsZSgiX2ltYWdpbmciKTsNCiAgICBpZiAoX2ltYWdpbmcgPT0gTlVM
TCkNCglyZXR1cm47DQogICAgUHlfREVDUkVGKF9pbWFnaW5nKTsNCg0KICAg
IFRrSW1hZ2luZ19Jbml0KCk7DQogICAgbW9kdWxlID0gUHlfSW5pdE1vZHVs
ZSgiX3RraW1hZ2luZyIsIGZ1bmN0aW9ucyk7DQoNCn0gICAvKiBpbml0X3Rr
aW1hZ2luZygpICovDQo=
---559023410-824023566-864146766=:3781
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="Setup.in"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.970520124606.3781E@weyr>
Content-Description: 

IyBTZXR1cC5pbiBmb3IgYnVpbGRpbmcgdGhlIFBJTC9UayBpbnRlZ3JhdGlv
biBtb2R1bGUgc3VjaCB0aGF0IGEgc3RvY2sNCiMgX3RraW50ZXIgY2FuIGJl
IHVzZWQuICBUaGlzIGlzIGJldHRlciB0aGFuIGhhdmluZyB0byBkbyBhIG5l
dyBfdGtpbnRlci5zbw0KIyBmb3IgZWFjaCBwbGF0Zm9ybSwgYW5kIHNob3Vs
ZCBtYWtlIGJpbmFyeSBkaXN0cmlidXRpb25zIG9mIFBJTCBlYXNpZXIgdG8N
CiMgdXNlLg0KDQoqc2hhcmVkKg0KDQojIFBvaW50IHRoaXMgdG8gdGhlIGxv
Y2F0aW9ucyBvZiB0aGUgVGNsL1RrIGluY2x1ZGUgZmlsZXMuDQojDQpUQ0xU
S0lOQ0xVREVTPS9ob21lL2ZkcmFrZS9pbmNsdWRlDQoNCiMgUG9pbnQgdGhp
cyB0byB0aGUgWDExIGluY2x1ZGUgZmlsZXMuDQojDQpYSU5DTFVERVM9L3Vz
ci9vcGVud2luL2luY2x1ZGUNCg0KIyBTZXQgJChUSykgdG8gdGhlIG9iamVj
dCBjb250YWluaW5nIHRoZSBUayBsaWJyYXJ5OyB0aGlzIHNob3VsZCB0eXBp
Y2FsbHkNCiMgYmUgdGhlIF90a2ludGVyLnNvIG9iamVjdCBjcmVhdGVkIGJ5
IHRoZSBzdG9jayBQeXRob24gYnVpbGQuDQojDQpUSz0kKGV4ZWNfcHJlZml4
KS9saWIvcHl0aG9uJChWRVJTSU9OKS9zaGFyZWRtb2R1bGVzL190a2ludGVy
LnNvDQoNCiMgWW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzLg0K
Iw0KSU5DTFVERVM9LUkuLi9saWJJbWFnaW5nIC1JJChUQ0xUS0lOQ0xVREVT
KSAtSSQoWElOQ0xVREVTKQ0KX3RraW1hZ2luZyB0a0ltYWdpbmcuYyAkKElO
Q0xVREVTKSAkKFRLKQ0K
---559023410-824023566-864146766=:3781--

_______________
IMAGE-SIG - SIG on Image Processing with Python

send messages to: image-sig@python.org
administrivia to: image-sig-request@python.org
_______________