use PyCallable_Check; export TK_VERSION and TCL_VERSION strings;
some Tk 4.0 specific changes
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 618587a..8669ac5 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -194,10 +194,16 @@
 Tcl_AppInit (interp)
      Tcl_Interp *interp;
 {
-  if (Tcl_Init (interp) == TCL_ERROR)
+    Tk_Window main;
+    main = Tk_MainWindow(interp);
+  if (Tcl_Init (interp) == TCL_ERROR) {
+    fprintf(stderr, "Tcl_Init error: %s\n", interp->result);
     return TCL_ERROR;
-  if (Tk_Init (interp) == TCL_ERROR)
+  }
+  if (Tk_Init (interp) == TCL_ERROR) {
+    fprintf(stderr, "Tk_Init error: %s\n", interp->result);
     return TCL_ERROR;
+  }
   return TCL_OK;
 }
 #endif /* !WITH_APPINIT */
@@ -699,8 +705,7 @@
   if (!PyTuple_Check (args) 
       || !(PyTuple_Size (args) == 2)
       || !PyString_Check (PyTuple_GetItem (args, 0))
-      || !(PyMethod_Check (PyTuple_GetItem (args, 1)) 
-	   || PyFunction_Check (PyTuple_GetItem (args, 1))))
+      || !PyCallable_Check (PyTuple_GetItem (args, 1)))
     {
       PyErr_SetString (PyExc_TypeError, "bad argument list");
       return NULL;
@@ -813,7 +818,7 @@
   id = GetFileNo (file);
   if (id < 0)
     return NULL;
-  if (!(PyMethod_Check(func) || PyFunction_Check(func)))
+  if (!PyCallable_Check(func))
     {
       PyErr_SetString (PyExc_TypeError, "bad argument list");
       return NULL;
@@ -982,8 +987,7 @@
 
   if (!PyArg_Parse (args, "(iO)", &milliseconds, &func))
     return NULL;
-  if (!(PyMethod_Check(func) || PyFunction_Check(func) ||
-        PyCFunction_Check(func)))
+  if (!PyCallable_Check(func))
     {
       PyErr_SetString (PyExc_TypeError, "bad argument list");
       return NULL;
@@ -1191,6 +1195,7 @@
   {NULL, NULL}
 };
 
+#undef WITH_READLINE /* XXX */
 #ifdef WITH_READLINE
 static int
 EventHook ()
@@ -1211,9 +1216,12 @@
 static void
 Tkinter_Cleanup ()
 {
+/* This segfault with Tk 4.0 beta and seems unnecessary there as well */
+#if TK_MAJOR_VERSION < 4
   /* XXX rl_deprep_terminal is static, damned! */
   while (tkMainWindowList != 0)
     Tk_DestroyWindow (tkMainWindowList->win);
+#endif
 }
 
 void
@@ -1250,6 +1258,10 @@
   PyDict_SetItemString (d, "ALL_EVENTS", v);
   v = Py_BuildValue ("i", TK_DONT_WAIT);
   PyDict_SetItemString (d, "DONT_WAIT", v);
+  v = Py_BuildValue ("s", TK_VERSION);
+  PyDict_SetItemString (d, "TK_VERSION", v);
+  v = Py_BuildValue ("s", TCL_VERSION);
+  PyDict_SetItemString (d, "TCL_VERSION", v);
 
 #ifdef WITH_READLINE
   rl_event_hook = EventHook;