[wxpython]sizer op een bepaald plek zetten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pientertje
  • Registratie: Februari 2009
  • Niet online
Hallo allemaal,

Ik ben bezig met een gui in wxpython. Ik heb een simpele applicatie gemaakt met wat schuifjes, knoppen en checkboxes. Maar nu wil ik op een bepaald plaats in mijn Frame een grafiek hebben. Deze grafiek maak ik met matplotlib:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from numpy import arange, sin, pi
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib.figure import Figure
import wx

class CanvasFrame(wx.Frame):
    def __init__(self,size):
        wx.Frame.__init__(self,None,-1,
                         'CanvasFrame',size=size)
        panel = wx.Panel(self,-1)
        self.SetBackgroundColour(wx.NamedColor("WHITE"))

        self.figure = Figure(figsize = (6,4))
        
        self.axes = self.figure.add_subplot(111)
        t = arange(0.0,3.0,0.01)
        s = sin(2*pi*t)
        
        self.axes.plot(t,s)
        self.canvas = FigureCanvas(self, -1, self.figure)

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.canvas, 0)
        
        
        self.SetSizer(self.sizer)    


    def OnPaint(self, event):
        self.canvas.draw()

class App(wx.App):
    def OnInit(self):
        'Create the main window and insert the custom frame'
        frame = CanvasFrame(size=(800,500))
        frame.Show(True)

        return True

app = App(0)
app.MainLoop()


Dit is daarvan het resultaat:
Afbeeldingslocatie: http://www.uploadarchief.net/files/download/resized/frame01_wxpython.png


Dit is mijn echte applicatie:
http://pastebin.com/Uix42n7p
Afbeeldingslocatie: http://www.uploadarchief.net/files/download/resized/frame02_wxpython.png


En ik wil dit:
Afbeeldingslocatie: http://www.uploadarchief.net/files/download/resized/frame03_wxpython.png

Mijn probleem is dus hoe ik dus de sizer op de juist plek in mijn applicatie krijg. Of ik kan natuurlijk ook de sizer afschaffen, maar dan moet ik wel de canvas op de juiste plek krijgen.

Ik heb al eindeloos gezocht op de site van wxpython, matplotlib, en in het boek wxpython in action. Zelfs in de voorbeelden die ik gevonden heb kon ik niet vinden wat ik zocht.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Het is weer een tijdje geleden dat ik iets met wxPython gedaan hebt, maar je maakt een nieuw Frame aan en dus een nieuw Window. Je zult die FigureCanvas in het andere frame met je controls moeten opnemen, niet in een nieuw frame.

Het grootste probleem is dat je je huidige layout van je applicatie met een absolute positionering maakt, ipv gebruik te maken van (combinaties van) sizers. Ik zou je willen aanraden om gebruik te maken van een wxGridBagSizer voor de positionering op het scherm, en van ander sizer (bijvoorbeeld wxGridSizer) om bij elkaar horende labels en controls in die GridBagSizer op te nemen.

[ Voor 45% gewijzigd door Remus op 14-01-2011 11:53 ]


Acties:
  • 0 Henk 'm!

  • pientertje
  • Registratie: Februari 2009
  • Niet online
Ok, ik heb de figurecanvas nu in het "grote" programma gezet, maar hij neemt alle ruimte in. Is er een manier hoe ik die kleiner kan krijgen en op een bepaald plek kan zetten?

Wat is dan precies het nut om alles in sizers te zetten? Het venster hoeft nooit vergroot of verkleind te worden.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Ik neem aan dat je die FigureCanvas in een wxPanel moet zetten, en vervolgens de wxPanel moet resizen.

Anders moet je denk ik toch echt wat googlen of zoeken in de docs van FigureCanvas.