wx.lib.plot und andere Elemente

Plattformunabhängige GUIs mit wxWidgets.
Antworten
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

Hallo
ich möchte in einem Frame ein Diagramm plotten, sowie
noch ein paar Buttons etc. Evtl mit BoxSizer. Was muß
ich beachten, jedenfalls geht das nachfolgende nicht,
(Diagramm wird nur mini ganz links oben dargestellt :

Code: Alles auswählen

import wx
import wx.lib.plot as plot


########################################################################
class PFrame:
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""

    l1 = [(90, 6370), (180, 6363), (270, 6386), (360, 6365), (450, 6364), (540, 6378), (630, 6372), (720, 6358), (810, 6360), (900, 6381), (990, 6367), (1080, 6374), (1170, 6381), (1260, 6370), (1350, 6360)]

    ymin = min([x[1] for x in l1]) - 2
    ymax = max([x[1] for x in l1]) + 2
    xmin = l1[0][0]  #index erstes
    xmax = l1[-1][0] #index letzes

    frm = wx.Frame(-1, 'line', size=(700, 400))
    client = plot.PlotCanvas(frm)
    line = plot.PolyLine(l1, legend='', colour='pink', width=1)
    gc = plot.PlotGraphics([line]) #, 'Line Graph', 'X Axis', 'Y Axis')
    client.Draw(gc,  xAxis= (xmin, xmax), yAxis= (ymin, ymax))
    frm.Show(True)


    class MyApp(wx.App):
        def OnInit(self):
            frm1 = PFrame(None, -1, 'test')
            frm1.Show(True)
            frm1.Centre()
            return True
    app = MyApp(0)
    app.MainLoop()
Gruß
joh
BlackJack

@joh#: Der Quelltext macht keinen Sinn. Eine Klasse mit einer `__init__()` die nur aus einem Docstring besteht und dann Code und eine weitere Klasse auf Klassenebene was da alles nicht hingehört. In der `OnInit()` wird versucht auf `PFrame` zuzugreifen was zu dem Zeitpunkt noch gar nicht existiert wo es ausgeführt wird, und dann auch noch mit Argumenten aufgerufen wird, die von dem Klasse nicht erwartet werden.

Zeig doch mal bitte den *tatsächlichen* Quelltext.

Edit: Das Programm fällt schon früher auf die Nase, nämlich bei dem Versuch ein `Frame` zu erstellen was -1 als erstes Argument bekommt. An der Stelle wird ein Eltern-Widget erwartet und keine Zahl.
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

BlackJack hat geschrieben:@joh#: ...

Zeig doch mal bitte den *tatsächlichen* Quelltext.
Da das der erste Versuch (zu diesem Thema) war, gibt es den nicht direkt.
Was es werden soll: statt oder auf dem blauen Panel im folgenden Bsp.
möchte ich das dort auskommentierte plotten:

Code: Alles auswählen

import wx
import wx.lib.plot as plot

DUMMYDATAl1 = [(90, 6370), (180, 6363), (270, 6386), (360, 6365), (450, 6364), (540, 6378), (630, 6372), (720, 6358), (810, 6360), (900, 6381), (990, 6367), (1080, 6374), (1170, 6381), (1260, 6370), (1350, 6360)]

class MyFrame(wx.Frame):
   def __init__(self, parent, ID, title):
      wx.Frame.__init__(self, parent, ID, title, size=(300, 250))

      panel1 = wx.Panel(self,-1, style=wx.SUNKEN_BORDER)
      panel2 = wx.Panel(self,-1, style=wx.SUNKEN_BORDER)

      panel1.SetBackgroundColour("BLUE")
      panel2.SetBackgroundColour("RED")

      l1 = DUMMYDATAl1 #########
      ymin = min([x[1] for x in l1]) - 2
      ymax = max([x[1] for x in l1]) + 2
      xmin = l1[0][0]  #index erstes
      xmax = l1[-1][0] #index letzes

      #client = plot.PlotCanvas(panel1, )
      #line = plot.PolyLine(l1, legend='', colour='pink', width=1)
      #gc = plot.PlotGraphics([line]) #, 'Line Graph', 'X Axis', 'Y Axis')
      #client.Draw(gc,  xAxis= (xmin, xmax), yAxis= (ymin, ymax))





      box = wx.BoxSizer(wx.VERTICAL)
      box.Add(panel1, 2, wx.EXPAND)
      box.Add(panel2, 1, wx.EXPAND)

      self.SetAutoLayout(True)
      self.SetSizer(box)
      self.Layout()


app = wx.PySimpleApp()
frame = MyFrame(None, -1, "Plot Test")
frame.Show()
app.MainLoop()
Antworten