<< What I'm saying is that you won't even need ttk widgets for this, if you stick to windows only. >>
Would that mean that the GUI in windows has other widgets that could prevent it from hanging once I start executing some code? Without the ttk widgets that is. Regards, Olrik 2008/11/2 Guilherme Polo <[EMAIL PROTECTED]>: > On Sun, Nov 2, 2008 at 3:26 PM, Olrik Lenstra <[EMAIL PROTECTED]> wrote: >> 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. > > What I'm saying is that you won't even need ttk widgets for this, if > you stick to windows only. > >> >> Is the syntax for ttk the same as for Tkinter? > > ttk is still tcl/tk, it is just new widges and theming engine. If by > same syntax you mean the widgets support the same options and methods, > then no. > >> >> 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 >>> >> > > > > -- > -- Guilherme H. Polo Goncalves > _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss