Probleme mit SplitterWindow und pyPlot Diagramm

Plattformunabhängige GUIs mit wxWidgets.
Antworten
TofuSalat
User
Beiträge: 7
Registriert: Montag 10. Juli 2006, 16:32

Donnerstag 21. Februar 2008, 13:24

Hallo Leute,

ich habe hier ein Problem mit meinem Prog. Ich habe ein SplitterWindow und in einem der beiden Fenster soll ein Diagramm angezeigt werden.
Allerdings wird dieses nur extrem klein angezeigt, ich hätte es allerdings gerne auf kompletter fenstergröße ;)
Wäre schön wenn mir jemand helfen könnte, hab nelich echt keinae ahnung mehr voran es noch liegen könnte...

Ich poste einmal das komplette Programm, damit es auch ohne ergänzungen ausführbar ist

Code: Alles auswählen

# _*_ coding: cp1252 _*_

#Importe
import wx
import wx.lib.plot as plot
import os

#IDs
ID_OPEN         = wx.NewId()
ID_SAVE         = wx.NewId()
ID_SAVEAS       = wx.NewId()
ID_SAVECLOSE    = wx.NewId()
ID_CLOSE        = wx.NewId()
ID_HELP         = wx.NewId()
ID_INFO         = wx.NewId()
ID_PAGESETUP    = wx.NewId()
ID_PRINTPREVIEW = wx.NewId()
ID_PRINTOUT     = wx.NewId()
##
ID_ENABLEGRID   = wx.NewId()
ID_ENABLELEGEND = wx.NewId()
##
ID_TB_OPEN      = wx.NewId()

#Konstanten
TITLE = 'Computer Aided Climate Data Evaluation'
VERSION = '0.1'
COPYRIGHT = '\n(C) 2007'
DESCRIPTION = '\nBeschreibung....'

wildcard =  'Bitmap Dateien (*.bmp)|*.bmp'
class Splitter(wx.SplitterWindow):
    def __init__(self, parent, ID):
        wx.SplitterWindow.__init__(self, parent, ID, style = wx.SP_LIVE_UPDATE)

class CacdeFrame(wx.Frame):

    def __init__(self, parent, id, TITLE):
        wx.Frame.__init__(self, None, -1, TITLE, wx.Point(5,6), wx.Size(700,500))

        # Variablen
        self.__path = ''
        ## SplitterWindow
        splitter = Splitter(self, -1)
        sty = wx.BORDER_SUNKEN
        ## Fenster 1
        self.split1 = wx.Window(splitter, style=sty)

        ## Fenster 2
        self.split2 = wx.Window(splitter, style=sty)
        self.panel2 = wx.Panel(self.split2)
        splitter.SplitVertically(self.split1, self.split2, -300)

#### DIAGRAMM
        self.DrawDiagram()

### / DIAGRAMM

# Menubar
        self.menubar = wx.MenuBar()

    # Erster Menupunkt 'Datei'
        menu = wx.Menu()

        menu.Append(ID_OPEN, 'Öffnen...\tCtrl+O', 'Öffnet eine Datei')
        self.Bind(wx.EVT_MENU, self.OnOpen, id = ID_OPEN)

        #-------------------------------------------------------------
        menu.AppendSeparator()
        #-------------------------------------------------------------

        menu.Append(ID_SAVE, 'Sichern\tCtrl+S', 'Datei sichern')
        self.Bind(wx.EVT_MENU, self.OnSave, id = ID_SAVE)

        menu.Append(ID_SAVEAS, 'Sichern als...\tF12', 'Datei unter neuem Namen sichern')
        self.Bind(wx.EVT_MENU, self.OnSaveAs, id = ID_SAVEAS)

        #-------------------------------------------------------------
        menu.AppendSeparator()
        #-------------------------------------------------------------

        menu.Append(ID_PAGESETUP, 'Seite einrichten...', 'Drucker konfigurieren')
        self.Bind(wx.EVT_MENU, self.OnFilePageSetup, id=ID_PAGESETUP)

        menu.Append(ID_PRINTPREVIEW, 'Seitenansicht', 'Zeigt eine Druckvorschau des Diagramms')
        self.Bind(wx.EVT_MENU, self.OnFilePrintPreview, id=ID_PRINTPREVIEW)

        menu.Append(ID_PRINTOUT, 'Drucken...\tCtrl+P', 'Druckt das Diagramm aus')
        self.Bind(wx.EVT_MENU, self.OnFilePrint, id=ID_PRINTOUT)

        #-------------------------------------------------------------
        menu.AppendSeparator()
        #-------------------------------------------------------------
        menu.Append(ID_SAVECLOSE, 'Sichern und Beenden', 'Speichert die aktuelle Datei und schließt die Anwendung')
        self.Bind(wx.EVT_MENU, self.OnSaveClose, id = ID_SAVECLOSE)

        menu.Append(ID_CLOSE, 'Beenden', 'Schließt die Anwendung')
        self.Bind(wx.EVT_MENU, self.OnClose, id = ID_CLOSE)

        self.menubar.Append(menu, '&Datei')
    # /Datei
    # 'Bearbeiten'
        menu = wx.Menu()

        menu.Append(ID_ENABLEGRID, 'Raster anzeigen', 'Schaltet das Raster an/aus', kind=wx.ITEM_CHECK)
        self.Bind(wx.EVT_MENU,self.OnEnableGrid, id = ID_ENABLEGRID)

        menu.Append(ID_ENABLELEGEND, 'Legende anzeigen', 'Schaltet die Legende an/aus', kind=wx.ITEM_CHECK)
        self.Bind(wx.EVT_MENU,self.OnEnableLegend, id = ID_ENABLELEGEND)

        self.menubar.Append(menu, '&Bearbeiten')
    # /Bearbeiten
    # 'Hilfe'
        menu = wx.Menu()

        menu.Append(ID_HELP, 'Hilfe\tF1', 'Öffnet die Hilfe')
        self.Bind(wx.EVT_MENU, self.OnHelp, id = ID_HELP)

        menu.Append(ID_INFO, 'Produktionformationen...', 'Zeigt Informationen über das Programm an')
        self.Bind(wx.EVT_MENU, self.OnInfo, id = ID_INFO)

        self.menubar.Append(menu, '&Hilfe')

        self.SetMenuBar(self.menubar)
    #/Hilfe
#/ Menubar
# Toolbar

        self.tb = self.CreateToolBar(wx.TB_HORIZONTAL | wx.NO_BORDER | wx.TB_FLAT)
        # Symbole für die Toolbar
        btn_open = wx.Bitmap('btn_open.ico', wx.BITMAP_TYPE_ICO)

        self.tb.AddSimpleTool(ID_TB_OPEN, btn_open, "Datei öffnen...", "Öffnet eine Datei")
        self.Bind(wx.EVT_TOOL, self.OnOpen, id=ID_TB_OPEN)
#
#        self.tb.AddSimpleTool(20, tb_open, "Öffnen...","Long help for 'Open'")
#        self.Bind(wx.EVT_TOOL, self.OnToolClick, id=20)

        self.tb.Realize()


# Statusleiste
        self.CreateStatusBar()
        self.SetStatusText('bereit')
#/ Statusleiste

# Methoden
    def OnFilePageSetup(self, event):
        self.diagram.PageSetup()

    def OnFilePrintPreview(self, event):
        self.diagram.PrintPreview()

    def OnFilePrint(self, event):
        self.diagram.Printout()

    def OnOpen(self, event):
        dlg = wx.FileDialog(self, message = 'Datei auswählen', defaultDir=os.getcwd(), defaultFile = '', wildcard = wildcard, style=wx.OPEN | wx.CHANGE_DIR)

        if dlg.ShowModal() == wx.ID_OK:
            self.__path = dlg.GetPath()

        self.SetStatusText(self.__path)

        dlg.Destroy()

    def OnSave(self, event):
        pass

    def OnSaveAs(self, event):
        pass

    def OnSaveClose(self, event):
        self.OnSave(event)
        self.OnClose(event)

    def OnClose(self, event):
        self.Destroy()

    def OnHelp(self, event):
        pass

    def OnInfo(self, event):
        self.info               = wx.AboutDialogInfo()
        self.info.Name          = TITLE
        self.info.Version       = VERSION
        self.info.Copyright     = COPYRIGHT
        self.info.Description   = DESCRIPTION
        self.info.Developers    = ['René Marksteiner', 'Alexander Neer', 'Patrick Steinau-Arendt']
        wx.AboutBox(self.info)


    def OnEnableGrid(self, event):
        self.diagram.SetEnableGrid(event.IsChecked())

    def OnEnableLegend(self,event):
        self.diagram.SetEnableLegend(event.IsChecked())


    def DrawDiagram(self):

        vbox_main = wx.BoxSizer(wx.VERTICAL)
        self.panel2.SetSizer(vbox_main)

        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox_main.Add(vbox, 1, wx.ALL | wx.EXPAND, 5)
        self.diagram = plot.PlotCanvas(self.panel2)

        #vbox.Add(self.diagram, 1, wx.EXPAND | wx.ALL, 5)

        lines = (
            plot.PolyLine(((1, 5), (2, 8), (3,2), (4,10)), colour = "red", legend = " Linie 1", width = 3),
            plot.PolyLine(((2, 0), (2, 20)), colour = "black", legend = " Linie 2", width = 3)
            )

        graphics = plot.PlotGraphics(objects = lines, title = u"Temperaturentwicklung", xLabel = "Iteration", yLabel = "Temperatur in Grad")

        self.diagram.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
        self.diagram.SetFontSizeAxis(10)
        self.diagram.SetFontSizeLegend(7)
        self.diagram.SetXSpec('auto')
        self.diagram.SetYSpec('auto')

        self.diagram.Draw(graphics, xAxis = (0, 20))

# Hauptprogramm
class CacdeApp(wx.App):
    def OnInit(self):
        frame = CacdeFrame(None, -1, TITLE)
        frame.Show(True)
        return True

if __name__ == '__main__':
    app = CacdeApp(False)
    app.MainLoop()
TofuSalat
User
Beiträge: 7
Registriert: Montag 10. Juli 2006, 16:32

Freitag 22. Februar 2008, 15:28

Hm kann mir niemand helfen? Es ist wahrscheinlich irgendwie ein problem mit den sizern, ich komm einfach nicht zu ner lösung :(
Pumeluk2
User
Beiträge: 26
Registriert: Samstag 24. März 2007, 11:24

Montag 25. Februar 2008, 10:40

Ich weiss nicht ob ich dir helfen kann, aber ich habe die gleichen Probleme mit bestimmten Objekten in Sizern. html.HtmlWindow ist auch so ein Aspirant, diese Objekte werden irgendwie nicht vom LayoutManagement "erkannt" und deshalb gibt es diese Effekte.

Ich habe mir geholfen, in dem ich den entsprechenden Sizern mit SetMinSize((X, Y)) eine Mindestgröße aufzwinge.

Vielleicht hilft das ja auch bei dir?

MfG,
Uwe
Antworten