def __init__(self, *args, **kwds): self.dirname = "" self.filename = "" # begin wxGlade: MainFrame.__init__ kwds["style"] = ( wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.MAXIMIZE | wx.MAXIMIZE_BOX | wx.SYSTEM_MENU | wx.RESIZE_BORDER | wx.CLIP_CHILDREN ) wx.Frame.__init__(self, *args, **kwds) # Menu Bar self.menubar = wx.MenuBar() wxglade_tmp_menu = wx.Menu() self.Open = wx.MenuItem(wxglade_tmp_menu, wx.ID_OPEN, "&Open", "Open a file to load", wx.ITEM_NORMAL) wxglade_tmp_menu.AppendItem(self.Open) self.Save = wx.MenuItem(wxglade_tmp_menu, wx.ID_SAVE, "&Save", "Save data file", wx.ITEM_NORMAL) wxglade_tmp_menu.AppendItem(self.Save) self.Exit = wx.MenuItem(wxglade_tmp_menu, wx.ID_EXIT, "E&xit", "Terminate the program", wx.ITEM_NORMAL) wxglade_tmp_menu.AppendItem(self.Exit) self.menubar.Append(wxglade_tmp_menu, "File") wxglade_tmp_menu = wx.Menu() self.Preferences = wx.MenuItem( wxglade_tmp_menu, wx.ID_PREFERENCES, "&Preferences", "Figure and axes preferences", wx.ITEM_NORMAL ) wxglade_tmp_menu.AppendItem(self.Preferences) self.menubar.Append(wxglade_tmp_menu, "Settings") wxglade_tmp_menu = wx.Menu() self.About = wx.MenuItem( wxglade_tmp_menu, wx.ID_ABOUT, "&About", "Information about this program", wx.ITEM_NORMAL ) wxglade_tmp_menu.AppendItem(self.About) self.menubar.Append(wxglade_tmp_menu, "Help") self.SetMenuBar(self.menubar) # Menu Bar end self.statusbar = self.CreateStatusBar(1, 0) self.mplPanel = MplPanel(self, wx.ID_ANY) self.stgPanel = StgPanel(self, wx.ID_ANY) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_MENU, self.OnOpen, self.Open) self.Bind(wx.EVT_MENU, self.OnSave, self.Save) self.Bind(wx.EVT_MENU, self.OnExit, self.Exit) self.Bind(wx.EVT_MENU, self.onPreferences, self.Preferences) self.Bind(wx.EVT_MENU, self.OnAbout, self.About)
class MainFrame(wx.Frame): def __init__(self, *args, **kwds): self.dirname = "" self.filename = "" # begin wxGlade: MainFrame.__init__ kwds["style"] = ( wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.MAXIMIZE | wx.MAXIMIZE_BOX | wx.SYSTEM_MENU | wx.RESIZE_BORDER | wx.CLIP_CHILDREN ) wx.Frame.__init__(self, *args, **kwds) # Menu Bar self.menubar = wx.MenuBar() wxglade_tmp_menu = wx.Menu() self.Open = wx.MenuItem(wxglade_tmp_menu, wx.ID_OPEN, "&Open", "Open a file to load", wx.ITEM_NORMAL) wxglade_tmp_menu.AppendItem(self.Open) self.Save = wx.MenuItem(wxglade_tmp_menu, wx.ID_SAVE, "&Save", "Save data file", wx.ITEM_NORMAL) wxglade_tmp_menu.AppendItem(self.Save) self.Exit = wx.MenuItem(wxglade_tmp_menu, wx.ID_EXIT, "E&xit", "Terminate the program", wx.ITEM_NORMAL) wxglade_tmp_menu.AppendItem(self.Exit) self.menubar.Append(wxglade_tmp_menu, "File") wxglade_tmp_menu = wx.Menu() self.Preferences = wx.MenuItem( wxglade_tmp_menu, wx.ID_PREFERENCES, "&Preferences", "Figure and axes preferences", wx.ITEM_NORMAL ) wxglade_tmp_menu.AppendItem(self.Preferences) self.menubar.Append(wxglade_tmp_menu, "Settings") wxglade_tmp_menu = wx.Menu() self.About = wx.MenuItem( wxglade_tmp_menu, wx.ID_ABOUT, "&About", "Information about this program", wx.ITEM_NORMAL ) wxglade_tmp_menu.AppendItem(self.About) self.menubar.Append(wxglade_tmp_menu, "Help") self.SetMenuBar(self.menubar) # Menu Bar end self.statusbar = self.CreateStatusBar(1, 0) self.mplPanel = MplPanel(self, wx.ID_ANY) self.stgPanel = StgPanel(self, wx.ID_ANY) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_MENU, self.OnOpen, self.Open) self.Bind(wx.EVT_MENU, self.OnSave, self.Save) self.Bind(wx.EVT_MENU, self.OnExit, self.Exit) self.Bind(wx.EVT_MENU, self.onPreferences, self.Preferences) self.Bind(wx.EVT_MENU, self.OnAbout, self.About) # end wxGlade def __set_properties(self): # begin wxGlade: MainFrame.__set_properties self.SetTitle("RSM Handler") self.statusbar.SetStatusWidths([-1]) # statusbar fields statusbar_fields = ["frame_1_statusbar"] for i in range(len(statusbar_fields)): self.statusbar.SetStatusText(statusbar_fields[i], i) # end wxGlade def __do_layout(self): # begin wxGlade: MainFrame.__do_layout sizer_1 = wx.BoxSizer(wx.HORIZONTAL) sizer_1.Add(self.mplPanel, 2, wx.ALL | wx.EXPAND, 5) sizer_1.Add(self.stgPanel, 1, wx.ALL | wx.EXPAND, 5) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout() # end wxGlade def OnOpen(self, event): # wxGlade: MainFrame.<event_handler> """Open a file""" dlg = wx.FileDialog(self, "Choose a file", "", "/home/dreamcatcher/Research/Como/XRD/9417/", "*.xrdml", wx.OPEN) if dlg.ShowModal() == wx.ID_OK: self.filename = dlg.GetFilename() self.dirname = dlg.GetDirectory() self.SetStatusText(self.filename) # read xrdml datafile om, tt, psd = xu.io.getxrdml_map(os.path.join(self.dirname + os.sep, self.filename)) # setup mplPanel self.mplPanel.setup(om, tt, psd) # selector should be set to angular mode self.stgPanel.cbMode.SetSelection(0) # draw the map in angular mode self.stgPanel.updateFigure(0) self.stgPanel.updateControls(0) # destroy dialog dlg.Destroy() def OnExit(self, event): # wxGlade: MainFrame.<event_handler> self.Close(True) def OnAbout(self, event): # wxGlade: MainFrame.<event_handler> # Create a message dialog box dlg = wx.MessageDialog(self, "RSM Handler v0.7", "XRD", wx.OK) dlg.ShowModal() dlg.Destroy() def OnSave(self, event): # wxGlade: MainFrame.<event_handler> if self.filename: # split file into base part and extension part base, ext = os.path.splitext(self.filename) # propose to save file with the same base as input file but with qfit extension dlg = wx.FileDialog( self, "Save QFit file", self.dirname, base + ".qfit", "*.*", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT ) if dlg.ShowModal() == wx.ID_OK: # save content in the file # this can be done with wxPython output streams: path = dlg.GetPath() self.saveFitDataFile(path) else: # Create a message dialog box dlg = wx.MessageDialog(self, "There is no file loaded.", "Error", wx.OK) dlg.ShowModal() dlg.Destroy() def saveFitDataFile(self, path): fout = open(path, "w") fout.write("#File created by RSM Handler from an experimental data\n") fout.write("#can be used for numerical fitting\n") fout.write("#[qx]\t[qz]\t[intensity]\n") # q data points qx, qz = self.mplPanel.get_q() # corresponding intensities intensity = self.mplPanel.get_intensity() # save data only on predefined limits qxmin, qxmax, qzmin, qzmax = self.mplPanel.getLimits() for i in range(len(intensity)): # save data only in predefined ranges if qx[i] > qxmin and qx[i] < qxmax and qz[i] > qzmin and qz[i] < qzmax: fout.write("{0}\t{1}\t{2}\n".format(qx[i], qz[i], intensity[i])) fout.close() def saveGpltDataFile(self, path, mode): pass def onPreferences(self, event): # wxGlade: MainFrame.<event_handler> dlg = PreferencesDialog(self) dlg.UpdateControls(self.mplPanel.figure) if dlg.ShowModal() == wx.ID_OK: dlg.UpdateFigure(self.mplPanel.figure)