[Tkinter-discuss] Fwd: WxPython -> Tkinter

Olrik Lenstra o.lenstra at gmail.com
Sun Nov 2 13:34:53 CET 2008


Hmm, I'm a bit stumped.
I installed the ttk module and tried applying the code.
However when I ran my code it gave me an error.
I thought I might have left a small typo in or something and removed
the code to check my own.

After I removed the ttk import and code it wouldn't even run my own code again.
Below is the Traceback:

C:\Users\Olrik Lenstra\Desktop\TroubleShooting Olrik>python TSO.pyw
Traceback (most recent call last):
  File "TSO.pyw", line 24, in <module>
    import TSOmain
  File "C:\Users\Olrik Lenstra\Desktop\TroubleShooting Olrik\TSOmain.pyw", line
79, in <module>
    TSO()
  File "C:\Users\Olrik Lenstra\Desktop\TroubleShooting Olrik\TSOmain.pyw", line
37, in TSO
    root = Tk.Tk()
  File "D:\Python25\lib\lib-tk\Tkinter.py", line 1638, in __init__
    self._loadtk()
  File "D:\Python25\lib\site-packages\ttk.py", line 50, in _wrapper
    self.tk.eval('package require tile') # TclError may be raised here
_tkinter.TclError: can't find package tile

C:\Users\Olrik Lenstra\Desktop\TroubleShooting Olrik>


Regards,
Olrik

2008/10/29 Olrik Lenstra <o.lenstra at gmail.com>:
> So that means that you will use a ttk frame instead of the Tkinter.Frame?
> I'll see if I can get this working once I get home. (my program is on my
> Desktop and I just do some testing on my laptop)
>
> Thanks a lot so far!
> Regards,
> Olrik
>
> 2008/10/29 Guilherme Polo <ggpolo at gmail.com>
>>
>> On 10/29/08, Olrik Lenstra <o.lenstra at gmail.com> wrote:
>> > I see, Thanks a lot, I really don't wish to bother you any further, but
>> > here's my current situation.
>> > I am still a beginning programmer and I am not entirely sure where to
>> > put
>> > this code exactly.
>> >
>> > How would I go about using this code?
>> >
>>
>> It should be very similar to what you are already doing in wx.
>>
>> But, you would need to layout your toplevel (the one that is created
>> when you call Tkinter.Tk()) as this:
>>
>> There would be a ttk.Frame that would hold all the other widgets,
>> which should be all ttk widgets according to this sample. Then you
>> would call safe_yield(frame, True) in the same situations you would in
>> wx. Now it remains to check if there is the same need for this in tk
>> as there is in wx.
>>
>> Finally, a sample way to layout the widgets:
>>
>> root = Tkinter.Tk()
>> frame = ttk.Frame(root)
>> btn1 = ttk.Button(frame, text="Button 1")
>> ...
>> ... some time later:
>> safe_yield(frame, True)
>> ...
>>
>> > Thank you so much in advance.
>> > Regards,
>> > Olrik
>> >
>> >  2008/10/29 Guilherme Polo <ggpolo at gmail.com>
>> >
>> > >
>> > >
>> > >
>> > > ---------- Forwarded message ----------
>> > > From: Guilherme Polo <ggpolo at gmail.com>
>> > > Date: Oct 29, 2008 9:16 AM
>> > > Subject: Re: [Tkinter-discuss] WxPython -> Tkinter
>> > > To: Olrik Lenstra <o.lenstra at gmail.com>
>> > > Cc: python-list at python.org
>> > >
>> > >
>> > > On 10/29/08, Olrik Lenstra <o.lenstra at gmail.com> wrote:
>> > >  > Hello everyone,
>> > >  >
>> > >  > A while ago I joined the Tutor mailing list, and they helped me out
>> > with a
>> > >  > question regarding wxPython.
>> > >  > Now however, I have tried a program in Tkinter and I would like to
>> > > see
>> > if
>> > >  > there is a similar command to "wx.SafeYield(self, True)".
>> > >
>> > >
>> > > It will be a combination of commands, not a single one. Initially I
>> > >  considered this as "probably without solution", since tcl acquired a
>> > >  yield command just in the 8.6a3 release, but then I looked at
>> > >  wx.SafeYield code and apparently it is possible to replicate it.
>> > >
>> > >  Here is an initial cut, it is very possible to contain something not
>> > >  equivalent to wx.SafeYield (besides it could be improved):
>> > >
>> > >
>> > >  import ttk
>> > >
>> > >  inside_tkyield = False
>> > >  disabled_wins = {}
>> > >
>> > >  def safe_yield(window, only_if_needed=False):
>> > >    window_disabler(window)
>> > >
>> > >    try:
>> > >        return tk_yield(window, only_if_needed)
>> > >    finally:
>> > >        for widget, flags in disabled_wins.iteritems():
>> > >            ttk.Widget.state(widget, flags)
>> > >        disabled_wins.clear()
>> > >
>> > >
>> > >  def window_disabler(window):
>> > >    widgets = window.children.values()
>> > >    widgets.append(window)
>> > >
>> > >    for widget in widgets:
>> > >        if widget.instate(['!disabled']):
>> > >            prev_flags = widget.state(['disabled'])
>> > >            disabled_wins[widget] = prev_flags
>> > >
>> > >
>> > >  def tk_yield(window, only_if_needed=False):
>> > >    # wx implements this differently based on the backend it is using
>> > >    global inside_tkyield
>> > >    if inside_tkyield:
>> > >        if not only_if_needed:
>> > >            raise RuntimeError("safe_yield called recursively")
>> > >
>> > >        return False
>> > >
>> > >    inside_tkyield = True;
>> > >
>> > >    window.update()
>> > >    window.update_idletasks()
>> > >
>> > >    inside_tkyield = False;
>> > >
>> > >    return True
>> > >
>> > >
>> > >  Note that this depends on ttk widgets
>> > >  (http://pypi.python.org/pypi/pyttk) since it uses
>> > widget.state to
>> > >  disable and reenable the widgets. On windows the "wm" command
>> > > supports
>> > >  disabling the entire window, so it is easier if you can use it.
>> > >
>> > > [Forwarded because I sent to the wrong list first time]
>> > >
>> > >
>> > >  >  Below is a copy of the message to the tutor list.
>> > >  >
>> > >  > > Dear Mailing list,
>> > >  > >
>> > >  > > a while ago a few of you helped me solve an issue I had with a
>> > > GUI /
>> > scan
>> > >  > > program that I made.
>> > >  > > The problem was that when I tried to move the frame it would hang
>> > until
>> > >  > the
>> > >  > > scan was finished.
>> > >  > > To solve this I had to add "wx.SafeYield(self, True)" to the scan
>> > > and
>> > the
>> > >  > > GUI wouldn't hang any more.
>> > >  > > Now I have redone the program and have written it with Tkinter
>> > instead of
>> > >  > > WxPython.
>> > >  > >
>> > >  > > So is there a similar command for Tkinter as there is for
>> > > WxPython?
>> > >  > >
>> > >  > > Thanks in advance.
>> > >  > > Regards,
>> > >  > > Olrik
>> > >  > >
>> > >  >
>> > >
>> > > > _______________________________________________
>> > >  >  Tkinter-discuss mailing list
>> > >  >  Tkinter-discuss at python.org
>> > >  >
>> > http://mail.python.org/mailman/listinfo/tkinter-discuss
>> > >  >
>> > >  >
>> > >
>> > >
>> > >
>> > >  --
>> > >  -- Guilherme H. Polo Goncalves
>> > >
>> > >
>> > > --
>> > > -- Guilherme H. Polo Goncalves
>> > >
>> > >
>> > >
>> > > _______________________________________________
>> > > Tkinter-discuss mailing list
>> > > Tkinter-discuss at python.org
>> > >
>> > http://mail.python.org/mailman/listinfo/tkinter-discuss
>> > >
>> >
>> >
>>
>>
>> --
>> -- Guilherme H. Polo Goncalves
>
>


More information about the Tkinter-discuss mailing list