Hmm, The program worked and no error messages popped up but the GUI still hung when I tried running the scan. Maybe this is a help:
The program is a program that does a couple of scans like ipconfig / dxdiag etc. While the scan is running the GUI has a status bar in which the text changes when the scan is running a new part of the scan. like: "TSO is now making an ipconfig log" Thanks again! :) Regards, Olrik 2008/11/2 Guilherme Polo <[EMAIL PROTECTED]>: > On Sun, Nov 2, 2008 at 2:40 PM, Guilherme Polo <[EMAIL PROTECTED]> wrote: >> 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. >> > > I have changed it a bit now, please retry with this one: > > import sys > > inside_tkyield = False > disabled_wins = {} > platform_win = 'win' in sys.platform > if not platform_win: > import ttk > > def safe_yield(window, only_if_needed=False): > window_disabler(window) > try: > return tk_yield(window, only_if_needed) > finally: > window_enabler(window) > > > def window_enabler(window): > for widget, flags in disabled_wins.iteritems(): > if platform_win: > window.wm_attributes('-disabled', 0) > else: > ttk.Widget.state(widget, flags) > disabled_wins.clear() > > > def window_disabler(window): > if platform_win and not int(window.wm_attributes('-disabled')): > window.wm_attributes('-disabled', 1) > disabled_wins[window] = 1 > return > > 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 > > It should work under windows, but it is not very nice elsewhere right > now unfortunately. > >>> 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 >>> > > > -- > -- Guilherme H. Polo Goncalves > _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss