Hi,
We have been working on a python wx app GUI for finding and selecting metadata 
(lots of lists and check boxes) from a test (that later fetches SQL 
time-history data for further processing in LabView or elsewhere).
As an afterthought, we decided to add in a small function that would allow 
previewing (plotting) of time-history data based on the selected metadata. The 
objective is to have a window pop up with the plotted time history data and 
allow the user to zoom, scroll etc, without closing or exiting the original GUI 
for selecting the metadata. The reason I want a pop up window is because I 
don't want to change the original metadata selection GUI (it's too complicated)

What I've done so far is:
Added a button to the metadata GUI called "plot". In the "OnPlotButton" event 
handler I embedded the plotting code.

The "plot" button works fine when I click it the first time. However, problems 
occur when I decide to plot a different set of data (without starting over the 
metadata GUI). I'd like to choose some new metadata, then click on the plot 
button again. But as of present, this causes the figure to show a gray image 
(no lines plotted) and then both GUIs hang up. I've tried closing the figure 
manually prior to selecting new metadata and clicking on "plot" but it still 
causes the metadata GUI to lock up.

Based on what I've been reading regarding MPL, it seems that the matplotlib 
show() function causes another instance of a GUI loop to remain suspended.

Is there any way to get the pop-up figure to show the time-history data and 
remain interactive (zoom, scroll, etc) and be able to re-plot or "replace" the 
current plot? I thought about using the draw() function but I couldn't get it 
to "pop-up" the figure. Also, if I'm not mistaken, the draw() function doesn't 
allow for interactive control?

I think this issue is similar to the issue described here: 
http://mail.python.org/pipermail/pythonmac-sig/2005-March/013365.html but I 
can't seem to find a simple solution, without embedding the plot figure 
directly into the existing GUI (not something easy to do as I'm not a very 
experienced Python programmer)

Please let me know if anyone can help.

Here is my code:

    def OnPlotButton(self, event):
        global SelTestID, SelRunList, SelEventID, SelChanList, SelCycList

        if self.notebook.GetSelection()  == 0:
            SelTestID = self.listCtrlStatus.GetItem(0,1).GetText()#.strip(", 
").split(", ")

            if self.listCtrlStatus.GetItem(2,0).GetText() == "Event Selected: ":
                SelRunList = 
self.listCtrlStatus.GetItem(1,1).GetText().strip(", ").split(", ")
                SelChanList = []
                SelCycList = []
                SelEventID = 
self.listCtrlStatus.GetItem(2,1).GetText()#.strip(", ").split(", ")
            else:
                if self.listCtrlStatus.GetItem(1,1).GetText() == "All":
                    SelRunList = []
                    for iRun in range(self.checkListRuns.GetItemCount()):
                        
SelRunList.append(str(self.checkListRuns.GetItemText(iRun)))
                else:
                    SelRunList = 
self.listCtrlStatus.GetItem(1,1).GetText().strip(", ").split(", ")

                SelChanList = self.checkListBoxChans.GetCheckedStrings()

                if self.listCtrlStatus.GetItem(3,1).GetText() == "All":
                    SelCycList = []
                else:
                    SelCycList = 
self.listCtrlStatus.GetItem(3,1).GetText().strip(", ").split(", ")

                SelEventID = ''

        elif self.notebook.GetSelection()  == 1:
            SelTestID = self.listCtrlStatus.GetItem(0,1).GetText()#.strip(", 
").split(", ")
            SelRunList = self.listCtrlStatus.GetItem(1,1).GetText().strip(", 
").split(", ")
            SelChanList = []
            SelCycList = []
            SelEventID = ''


        ##VTS.MsgBox("Test","eWO: " + SelTestID + "\nRuns: " + str(SelRunList) 
+ "\nChans: " + str(SelChanList) + "\nCycles: " + str(SelCycList) + "\nEvent: " 
+ SelEventID)

        #cleanup to prevent memory leak if previously plotted
        plt.close('all') ##make sure all figure windows are closed
        fig = []
        ax = []


        #prep data for plotting plotting
        myeWO = str(SelTestID)
        nRuns = len(SelRunList)
        myRuns = []
        for iRuns in range(nRuns):
            myRuns.append(str(SelRunList[iRuns]))

        nChans = len(SelChanList)
        myChans = []
        for iChan in range(nChans):
            myChans.append(str(SelChanList[iChan]))

        dataLst = VTS.FetchSQLRunDataByName(myeWO, myRuns, myChans)
        lenData = len(dataLst)

        dataArry = np.zeros((lenData, nChans + 1))
        for iPoint in range(lenData):
            dataArry[iPoint] = dataLst[iPoint]

        #begin plotting
        fig = plt.figure(1)
        ax = fig.add_subplot(111)
        myPlotLines = []
        for iChan in range(nChans):
            tempLine, = ax.plot(dataArry[:,0], dataArry[:,iChan+1], label = 
myChans[iChan])
            myPlotLines.append(tempLine)

        myTitle = plt.title('eWO: ' + myeWO + '\nRun IDs: ' + str(myRuns))
        ax.grid('on')
        ##plt.legend(loc=0)
        myLegend = plt.legend(loc=0)
        legTxt  = myLegend.get_texts() ##get legent text
        plt.setp(legTxt, fontsize='small') ##set legend text fontsize to small
        myXLabel = plt.xlabel('Time (s)')
        ##VTS.MsgBox("Test","eWO: " + SelTestID + "\neWO type: " + 
str(type(SelTestID)) + "\nRuns: " + str(myRuns) + "\nnRuns " + str(nRuns) + 
"\nChans: " + str(myChans) + "\nnChans: " + str(nChans) + "\nEvent: " + 
SelEventID)

        plt.show()

        event.Skip()

Krishna Adrianto Pribadi
Test Engineer
Desk (TTF): 256.480.4450
Cell: 412.401.1477

Harley-Davidson Motor Co.
Talladega Test Facility
Vehicle Test Stands (VTS)



This communication (including any attachments) is for the use of
the intended recipient(s) only and may contain information that is
confidential, privileged or otherwise legally protected. Any
unauthorized use or dissemination of this communication is
prohibited. If you have received this communication in error,
please immediately notify the sender by return e-mail message and
delete all copies of the original communication. Thank you for your
cooperation.
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to