I see. So I will have to go about and change all the Tk.Button() to ttk.Button()? The program I am making will be for the windows OS only.
Is the syntax for ttk the same as for Tkinter? Regards, Olrik 2008/11/2 Guilherme Polo <[EMAIL PROTECTED]>: > On Sun, Nov 2, 2008 at 12:34 PM, Olrik Lenstra <[EMAIL PROTECTED]> wrote: >> I would like to thank you already for all the help you've given me, it >> is really appreciated :) > > You are welcome. > >> I decided to update to Python2.6 instead of using the tile pack. My >> application now shows the GUI again. >> So I added the code you gave me to prevent the window from hanging >> once I execute my scan. >> I get the following Traceback: >> >> D:\Documents\OLPrograms\TroubleShooting Olrik\sourcecode\TSO(source)>python >> TSO. >> pyw >> Exception in Tkinter callback >> Traceback (most recent call last): >> File "D:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__ >> return self.func(*args) >> File "D:\Documents\OLPrograms\TroubleShooting >> Olrik\sourcecode\TSO(source)\TSO >> main.pyw", line 29, in OnScan >> TSOscn.Scan(root, status) >> File "D:\Documents\OLPrograms\TroubleShooting >> Olrik\sourcecode\TSO(source)\TSO >> scn.pyw", line 23, in Scan >> TSOex.safe_yield(Frame, True) >> File "D:\Documents\OLPrograms\TroubleShooting >> Olrik\sourcecode\TSO(source)\TSO >> ex.pyw", line 75, in safe_yield >> window_disabler(window) >> File "D:\Documents\OLPrograms\TroubleShooting >> Olrik\sourcecode\TSO(source)\TSO >> ex.pyw", line 90, in window_disabler >> if widget.instate(['!disabled']): >> AttributeError: Button instance has no attribute 'instate' >> > > That is because Button is not a ttk.Button, but a "normal" > Tkinter.Button. I didn't know before you would be using windows, but > since this is the case, you may try substituting the use of instate > and state calls (that are available only for ttk widgets) by the use > of widget.wm_attributes('-disabled', 1), > widget.wm_attributes('-disabled', 0) and > widget.wm_attributes('-disabled'). I will be able to test it here > later since my new pc arrived with a windows vista. > >> D:\Documents\OLPrograms\TroubleShooting Olrik\sourcecode\TSO(source)> >> >> I don't know if it makes a difference, But I think you should know >> that I use different files that import other applications (made by me) >> Example: >> >> TSO.pyw is the main script, this looks if the very first argument is >> "TSO.pyw", if it is, run "TSOmain.TSO()" >> TSOmain.pyw is the GUI and the GUI only, from there it calls other files etc. >> I hope that wasn't too confusing. >> >> Thanks again, I really appreciate it. >> >> Regards, >> Olrik >> >> 2008/11/2 Guilherme Polo <[EMAIL PROTECTED]>: >>> On Sun, Nov 2, 2008 at 10:34 AM, Olrik Lenstra <[EMAIL PROTECTED]> wrote: >>>> 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 >>>> >>> >>> You don't have tile installed neither was your tkinter compiled >>> against tcl/tk 8.5. >>> Python 2.6 already brings tcl/tk 8.5 and tkinter compiled against them. >>> Another option is to download tile from: >>> http://sourceforge.net/project/showfiles.php?group_id=11464&package_id=107795 >>> (get the tile082.zip so you have to do nothing at all). Then unpack >>> that somewhere. Then you have to set the environment variable >>> TILE_LIBRARY to the directory where this was unpacked, then you should >>> be able to run the program with ttk. >>> You could set this environment var inside your app too: >>> >>> import os >>> os.environ['TILE_LIBRARY'] = 'x:/unpacked/tile/here' >>> >>> import ttk >>> >>> .... >>> >>>> C:\Users\Olrik Lenstra\Desktop\TroubleShooting Olrik> >>>> >>>> >>>> Regards, >>>> Olrik >>>> >>>> 2008/10/29 Olrik Lenstra <[EMAIL PROTECTED]>: >>>>> 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 <[EMAIL PROTECTED]> >>>>>> >>>>>> On 10/29/08, Olrik Lenstra <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> >>>>>> > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> > > ---------- Forwarded message ---------- >>>>>> > > From: Guilherme Polo <[EMAIL PROTECTED]> >>>>>> > > Date: Oct 29, 2008 9:16 AM >>>>>> > > Subject: Re: [Tkinter-discuss] WxPython -> Tkinter >>>>>> > > To: Olrik Lenstra <[EMAIL PROTECTED]> >>>>>> > > Cc: [EMAIL PROTECTED] >>>>>> > > >>>>>> > > >>>>>> > > On 10/29/08, Olrik Lenstra <[EMAIL PROTECTED]> 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@python.org >>>>>> > > > >>>>>> > http://mail.python.org/mailman/listinfo/tkinter-discuss >>>>>> > > > >>>>>> > > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> > > -- >>>>>> > > -- Guilherme H. Polo Goncalves >>>>>> > > >>>>>> > > >>>>>> > > -- >>>>>> > > -- Guilherme H. Polo Goncalves >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> > > _______________________________________________ >>>>>> > > Tkinter-discuss mailing list >>>>>> > > Tkinter-discuss@python.org >>>>>> > > >>>>>> > http://mail.python.org/mailman/listinfo/tkinter-discuss >>>>>> > > >>>>>> > >>>>>> > >>>>>> >>>>>> >>>>>> -- >>>>>> -- Guilherme H. Polo Goncalves >>>>> >>>>> >>>> >>> >>> >>> >>> -- >>> -- Guilherme H. Polo Goncalves >>> >> > > > > -- > -- Guilherme H. Polo Goncalves > _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss