Strang thing in tkinter, and pdb too?

jfong at ms4.hinet.net jfong at ms4.hinet.net
Sun Jun 11 22:06:22 EDT 2017


I had donwload wdiget-tour-py3.tar.gz examples from this site:
http://www.hullsvle.ch/moodle/mod/resource/view.php?id=6697
and run one of its scripts canvasruler.py, I get stange result.

First, when I run it in the cmd box, although I get a message in the box,
but everything else is fine. The GUI works correctly.

    D:\Temp\widget-tour-py3>python canvasruler.py
    can't invoke "event" command: application has been destroyed
        while executing
    "event generate $w <<ThemeChanged>>"
        (procedure "ttk::ThemeChanged" line 6)
        invoked from within
    "ttk::ThemeChanged"

Second, I try to find out where is this message comes from. I insert
a statement "import pdb; pdb.set_trace()" at the source line 33:

    33 import pdb; pdb.set_trace()
    34 #
    35 # Note : to execute the Tk command, I need to create a Toplevel window
    36 # I guess I could use the toplevel create in widget.py, buth then this
    37 # module would not run stand-alone
    38 #
    39 temp = Tk()
    40 STIPPLE_BITMAP = temp.tk.eval(
    41      'image create bitmap @%s' % STIPPLE_BITMAP_FILE )
    42 ## Now I can delete the spurious window
    43 temp.destroy()
    44
    45
    46 TAB_NORMAL_STYLE = {'fill':'black', 'stipple':''}
    47 TAB_INRANGE_STYLE = {'fill':'green', 'stipple':''}
    48 TAB_OUTOFRANGE_STYLE = {'fill':'red', 'stipple':STIPPLE_BITMAP}
    49
    50
    51 class RulerCanvas (Canvas):

and run this script under interpreter, it stops at the point correctly and
I can step through to reach the line 51 without seeing that message appear.

    D:\Temp\widget-tour-py3>python
    Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import canvasruler
    > d:\work\python\widget-tour-py3\canvasruler.py(39)<module>()
    -> temp = Tk()
    (Pdb) next
    > d:\work\python\widget-tour-py3\canvasruler.py(40)<module>()
    -> STIPPLE_BITMAP = temp.tk.eval(
    (Pdb) until 51
    > d:\work\python\widget-tour-py3\canvasruler.py(51)<module>()
    -> class RulerCanvas (Canvas):
    (Pdb)

Third, I moved the set_trace() to line 50 and run again. This time I saw that message appears in the cmd box.

    D:\Temp\widget-tour-py3>python
    Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import canvasruler
    > d:\work\python\widget-tour-py3\canvasruler.py(51)<module>()
    -> class RulerCanvas (Canvas):
    (Pdb) can't invoke "event" command: application has been destroyed
         while executing
    "event generate $w <<ThemeChanged>>"
        (procedure "ttk::ThemeChanged" line 6)
        invoked from within
    "ttk::ThemeChanged"

    (Pdb) list
     46     TAB_NORMAL_STYLE = {'fill':'black', 'stipple':''}
     47     TAB_INRANGE_STYLE = {'fill':'green', 'stipple':''}
     48     TAB_OUTOFRANGE_STYLE = {'fill':'red', 'stipple':STIPPLE_BITMAP}
     49
     50     import pdb; pdb.set_trace()
     51  -> class RulerCanvas (Canvas):
     52
     53         def __init__(self, master ):
     54             Canvas.__init__(self, master, width=200+RULER_LENGTH, height=100 )
     55             self.draw_ruler()
     56             self.draw_well()
    (Pdb)

My problem is why the difference? and how to find out where that message comes from?

PS. I also run this test under a Win8.1/64bit machine, get the same result.
PSS. I had scan files in the whole example directory and found there is
     no any file using ttk module.
 
Best Regards,
Jach Fong



More information about the Python-list mailing list