Hm. It seems that many people have problems with wxPython 2.9 on Mavericks. I have tried installing wxPython 2.8, but that would not work on my system.
The GUI will show up when starting relax. Complaining about: "iCCP: known incorrect sRGB profile". And terminal will show: " 2013-12-03 22:56:31.956 Python[1180:d0b] CoreText performance note: Client called CTFontCreateWithName() using name ".Lucida Grande UI" and got font with PostScript name ".LucidaGrandeUI". For best performance, only use PostScript names when calling this API. 2013-12-03 22:56:31.956 Python[1180:d0b] CoreText performance note: Set a breakpoint on CTFontLogSuboptimalRequest to debug. 2013-12-03 22:56:37.521 Python[1180:d0b] CoreText performance note: Client called CTFontCreateWithName() using name ".Lucida Grande UI" and got font with PostScript name ".LucidaGrandeUI". For best performance, only use PostScript names when calling this API. " This problem has been reported before: http://successfulsoftware.net/2013/10/23/fixing-qt-4-for-mac-os-x-10-9-mavericks/ https://bugreports.qt-project.org/browse/QTBUG-32789 http://wxpython-users.1045709.n5.nabble.com/another-possible-issue-with-new-Mac-OS-Mavericks-td5719024.html In the relax GUI: The Unit test will perform fine. The GUI test will crash relax. The system test will run for a long time, and crash at some point. (After 30 dots ?) It is hard to see at which points it crashes. The system test performed in terminal goes fine. ------- I found one instance of "AppendText" in line 1048. Should I try to alter it ? from: self.AppendText(string_list[i]) to: wx.CallAfter(self.textArea.AppendText, string_list[i]) or wx.CallAfter(self.AppendText, string_list[i]) ------- [tlinnet@haddock relax_trunk]$ grep -r "AppendText" ./gui Binary file ./gui/controller.pyc matches ./gui/controller.py: self.AppendText(string_list[i]) [tlinnet@haddock relax_trunk]$ grep -r "wx.CallAfter(" ./gui ./gui/spin_viewer/frame.py: wx.CallAfter(item.Enable, enable) ./gui/spin_viewer/frame.py: wx.CallAfter(self.bar.EnableTool, self.spin_loader_id, enable) ./gui/spin_viewer/frame.py: wx.CallAfter(self.pipe_name.Enable, enable) ./gui/spin_viewer/frame.py: wx.CallAfter(self.refresh_safe) ./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool, self.TB_FILE_NEW, enable) ./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool, self.TB_FILE_CLOSE, enable) ./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool, self.TB_FILE_CLOSE_ALL, enable) ./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool, self.TB_FILE_OPEN, enable) ./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool, self.TB_FILE_SAVE, enable) ./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool, self.TB_FILE_SAVE_AS, enable) ./gui/relax_gui.py: wx.CallAfter(self.controller.main_gauge.SetValue, 100) ./gui/relax_gui.py: wx.CallAfter(self.show_results_viewer_safe, warn=True) ./gui/relax_gui.py: wx.CallAfter(dlg.ShowModal) ./gui/relax_gui.py: wx.CallAfter(self.show_results_viewer_safe, warn=False) ./gui/relax_gui.py: wx.CallAfter(self.status_bar.SetStatusText, "(C) 2001-2013 the relax development team", 0) ./gui/relax_gui.py: wx.CallAfter(self.status_bar.SetStatusText, "Current data pipe:", 1) ./gui/relax_gui.py: wx.CallAfter(self.status_bar.SetStatusText, pipe, 2) ./gui/icons.py: wx.CallAfter(self.gui.exit_gui) ./gui/results_viewer.py: wx.CallAfter(self.pipe_name.Enable, enable) ./gui/results_viewer.py: wx.CallAfter(self.button_open.Enable, enable) ./gui/results_viewer.py: wx.CallAfter(self.refresh_safe) ./gui/results_viewer.py: wx.CallAfter(self.Raise) ./gui/analyses/auto_noe.py: wx.CallAfter(self.field_nmr_frq.Enable, enable) ./gui/analyses/auto_noe.py: wx.CallAfter(self.field_results_dir.Enable, enable) ./gui/analyses/auto_noe.py: wx.CallAfter(self.spin_systems.Enable, enable) ./gui/analyses/auto_noe.py: wx.CallAfter(self.peak_intensity.Enable, enable) ./gui/analyses/auto_noe.py: wx.CallAfter(self.button_exec_relax.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.field_results_dir.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.field_pre_run_dir.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.spin_systems.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.field_cluster.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.button_isotope.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.button_r1.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.button_chemical_shift.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.button_interatom_define.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.peak_intensity.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.model_field.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.button_exec_relax.Enable, enable) ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.field_cluster.SetValue, "free spins") ./gui/analyses/auto_relax_disp.py: wx.CallAfter(self.field_cluster.SetValue, text) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.field_results_dir.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.spin_systems.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.relax_data.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.button_dipole_pair.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.button_csa.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.button_isotope_heteronuc.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.button_isotope_proton.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.local_tm_model_field.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.mf_model_field.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.grid_inc.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.mc_sim_num.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.max_iter.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.mode.Enable, enable) ./gui/analyses/auto_model_free.py: wx.CallAfter(self.button_exec_relax.Enable, enable) ./gui/analyses/auto_rx_base.py: wx.CallAfter(self.field_nmr_frq.Enable, enable) ./gui/analyses/auto_rx_base.py: wx.CallAfter(self.field_results_dir.Enable, enable) ./gui/analyses/auto_rx_base.py: wx.CallAfter(self.spin_systems.Enable, enable) ./gui/analyses/auto_rx_base.py: wx.CallAfter(self.peak_intensity.Enable, enable) ./gui/analyses/auto_rx_base.py: wx.CallAfter(self.grid_inc.Enable, enable) ./gui/analyses/auto_rx_base.py: wx.CallAfter(self.mc_sim_num.Enable, enable) ./gui/analyses/auto_rx_base.py: wx.CallAfter(self.button_exec_relax.Enable, enable) ./gui/analyses/__init__.py: wx.CallAfter(self.notebook.SetSelection, self._current) ./gui/analyses/__init__.py: wx.CallAfter(status.observers.gui_analysis.notify) ./gui/analyses/base.py: wx.CallAfter(self.spin_systems.SetValue, str_to_gui(self.spin_count())) ./gui/uf_objects.py: wx.CallAfter(app.gui.controller.Raise) ./gui/relax_prompt.py: wx.CallAfter(self.prompt.Enable, enable) ./gui/controller.py: wx.CallAfter(self.main_gauge.Pulse) ./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.cdp.SetValue, str_to_gui(pipe)) ./gui/controller.py: wx.CallAfter(self.name.SetValue, str_to_gui(name)) ./gui/controller.py: wx.CallAfter(self.panel_rx.Show) ./gui/controller.py: wx.CallAfter(self.update_rx) ./gui/controller.py: wx.CallAfter(self.panel_rx.Hide) ./gui/controller.py: wx.CallAfter(self.panel_mf.Show) ./gui/controller.py: wx.CallAfter(self.update_mf) ./gui/controller.py: wx.CallAfter(self.panel_mf.Hide) ./gui/controller.py: wx.CallAfter(self.update_gauge) ./gui/controller.py: wx.CallAfter(self.main_panel.Layout) ./gui/controller.py: wx.CallAfter(self.timer.Start, 100) ./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, 100) ./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 100) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, 100) ./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 100) ./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 100) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, 100) ./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 100) ./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.global_model_mf.SetValue, str_to_gui(status.auto_analysis[key].diff_model)) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, percent) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue, percent) ./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, percent) ./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0) ./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, percent) ./gui/controller.py: wx.CallAfter(self.control.write) ./gui/controller.py: wx.CallAfter(self.control.write) ./gui/pipe_editor.py: wx.CallAfter(self.button_bundle.Enable, False) ./gui/pipe_editor.py: wx.CallAfter(self.button_create.Enable, False) ./gui/pipe_editor.py: wx.CallAfter(self.button_copy.Enable, False) ./gui/pipe_editor.py: wx.CallAfter(self.button_delete.Enable, False) ./gui/pipe_editor.py: wx.CallAfter(self.button_hybrid.Enable, False) ./gui/pipe_editor.py: wx.CallAfter(self.button_switch.Enable, False) ./gui/pipe_editor.py: wx.CallAfter(self.button_bundle.Enable, True) ./gui/pipe_editor.py: wx.CallAfter(self.button_create.Enable, True) ./gui/pipe_editor.py: wx.CallAfter(self.button_copy.Enable, True) ./gui/pipe_editor.py: wx.CallAfter(self.button_delete.Enable, True) ./gui/pipe_editor.py: wx.CallAfter(self.button_hybrid.Enable, True) ./gui/pipe_editor.py: wx.CallAfter(self.button_switch.Enable, True) ./gui/pipe_editor.py: wx.CallAfter(self.Raise) ./gui/pipe_editor.py: wx.CallAfter(self.update_grid_safe) ./gui/interpreter.py: wx.CallAfter(gui_raise, instance, raise_flag=False) ./gui/components/base_list.py: wx.CallAfter(self.build_element_safe) 2013/12/4 Edward d'Auvergne <[email protected]>: > Hi, > > It could be related to the first link. These issues are difficult to > track down and find, as a GUI must naturally run multi-threaded and > multi-threaded debugging is a nightmare. The problem is likely to be > fixed by wrapping a call to a wxPython method or function within a > wx.CallAfter() call. Grep the sources to see how often we have used > this construct already. This seems to only be triggered on your > system as I do not see it on Mac OS X 10.6, 10.7 and 10.8, Windows > 2000, Vista and 7, or Linux (Mandriva 2008.1 32-bit, Mageia 1 64-bit, > Mageia 3 64-bit, SUSE 64-bit, etc.). It may be related to wxPython > 2.9.5.0. > > This does not mean that it is not a bug in the relax GUI sources, just > that it has never been uncovered before. One trick is to find a way > of reliably and quickly reproducing the error, maybe by running a > single GUI test, and then to use the print statements to find exactly > where the error occurred. Then return statements or massive code > deletion can be used to exit a function early. If the bug is gone > after that, you know the error was in the part that was deleted. Then > this can be repeated until the bad function call can be found. The > error could also be in the GUI test itself. Here wx.Yield() calls are > often needed to prevent racing, as the test runs the GUI code much, > much faster than what a user sitting at a computer could ever do. > > Regards, > > Edward > > > > On 3 December 2013 22:23, Troels E. Linnet > <[email protected]> wrote: >> URL: >> <http://gna.org/bugs/?21324> >> >> Summary: GUI error on mac OS X Maverics 10.9 >> Project: relax >> Submitted by: tlinnet >> Submitted on: Tue 03 Dec 2013 09:23:31 PM GMT >> Category: None >> Severity: 3 - Normal >> Priority: 3 - Low >> Status: None >> Privacy: Public >> Assigned to: None >> Originator Name: >> Originator Email: >> Open/Closed: Open >> Discussion Lock: Any >> Release: Repository: trunk >> Operating System: Mac OS X (Intel) >> >> _______________________________________________________ >> >> Details: >> >> I have tried to use: >> wxPython2.9-osx-2.9.5.0-cocoa-py2.7.dmg >> and >> brew install wxmac >> >> to get the same GUI errors. >> >> Log attached. >> >> *** Terminating app due to uncaught exception 'NSRangeException', reason: >> '*** >> -[__NSArrayM objectAtIndex:]: index 18446744073709551615 beyond bounds for >> empty array' >> >> Could it be related to this post? >> http://stackoverflow.com/questions/17246160/textctrl-providing-an-out-of-bound-exception-in-wxpython >> >> http://stackoverflow.com/questions/13085683/xcode-terminating-app-due-to-uncaught-exception-nsrangeexception >> >> http://stackoverflow.com/questions/4289894/terminating-app-due-to-uncaught-exception-nsrangeexception-reason >> >> I will now try with: >> wxPython2.9-osx-2.9.5.0-carbon-py2.7.dmg >> >> >> >> >> >> _______________________________________________________ >> >> File Attachments: >> >> >> ------------------------------------------------------- >> Date: Tue 03 Dec 2013 09:23:31 PM GMT Name: gui_error.log Size: 70kB By: >> tlinnet >> >> <http://gna.org/bugs/download.php?file_id=19415> >> >> _______________________________________________________ >> >> Reply to this item at: >> >> <http://gna.org/bugs/?21324> >> >> _______________________________________________ >> Message sent via/by Gna! >> http://gna.org/ >> >> >> _______________________________________________ >> relax (http://www.nmr-relax.com) >> >> This is the relax-devel mailing list >> [email protected] >> >> To unsubscribe from this list, get a password >> reminder, or change your subscription options, >> visit the list information page at >> https://mail.gna.org/listinfo/relax-devel _______________________________________________ relax (http://www.nmr-relax.com) This is the relax-devel mailing list [email protected] To unsubscribe from this list, get a password reminder, or change your subscription options, visit the list information page at https://mail.gna.org/listinfo/relax-devel

