Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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)