CanvasPanel Größe ändern

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

Hallo,

der folgende Code malt Tutorial-/Beispielnah 4 CanvasPanel's
untereinander:

Code: Alles auswählen

# -*- coding: utf-8 -*-

from numpy import arange#, sin, pi
from  random import random
import wxversion
#wxversion.select("2.8")

import wx, sys, csv
from random import random
import matplotlib as mpl
mpl.use('WXAgg')

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure

def do_it(self, _event):
    pass


class CanvasPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        figure = Figure()
        self.axes = figure.add_subplot(111)
        self.canvas = FigureCanvas(self, wx.ID_ANY, figure)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
        self.SetSizer(sizer)
        self.Fit()

    def draw(self, data_y):
        self.axes.plot(data_y)
        self.canvas.draw()


class GraphFrame(wx.Frame):
    """The main frame of the application"""
    TITLE = 'test'

    def __init__(self):
        wx.Frame.__init__(
            self,
            None,
            wx.ID_ANY,
            title=self.TITLE,
            pos=(50, 50),
            size=(1200, 600)
        )
        self.create_menu()
        self.create_status_bar()
        self.create_main_panel()
        self.data = []

    def create_menu(self):
        self.menubar = wx.MenuBar()

        menu_file = wx.Menu()
        m_expt = menu_file.Append(-1, "&Save plot\tCtrl-S", "Save plot to file")
        self.Bind(wx.EVT_MENU, self.on_save_plot, m_expt)
        menu_file.AppendSeparator()
        m_exit = menu_file.Append(-1, "E&xit\tCtrl-X", "Exit")
        self.Bind(wx.EVT_MENU, self.on_exit, m_exit)

        self.menubar.Append(menu_file, "&File")
        self.SetMenuBar(self.menubar)

    def create_main_panel(self):
        panel = wx.Panel(self)

        button1 = wx.Button(panel, wx.ID_ANY, 'B1')
        self.Bind(wx.EVT_BUTTON, self.on_button1, button1)

        button2 = wx.Button(panel, wx.ID_ANY, 'B2')
        self.Bind(wx.EVT_BUTTON, self.on_button2, button2)

        button_sizer = wx.BoxSizer(wx.VERTICAL)
        canvasSizer = wx.BoxSizer(wx.VERTICAL)
        top_content_sizer = wx.BoxSizer(wx.HORIZONTAL)

        button_sizer.AddSpacer(20)
        button_sizer.Add(button1)
        button_sizer.AddSpacer(20)
        button_sizer.Add(button2)
        button_sizer.AddSpacer(20)

        self.subpanel1 = CanvasPanel(panel)
        self.subpanel1.SetClientSize((101, 200))
        self.subpanel1.draw([0.5] * 2000)          #Nullinie

        self.subpanel2 = CanvasPanel(panel)
        self.subpanel2.draw([0.0] * 2000)          #Nullinie

        self.subpanel3 = CanvasPanel(panel)
        self.subpanel3.draw([0] * 2000)          #Nullinie

        self.subpanel4 = CanvasPanel(panel)
        self.subpanel4.draw([0] * 2000)          #Nullinie

        canvasSizer.Add(self.subpanel1)
        canvasSizer.Add(self.subpanel2)
        canvasSizer.Add(self.subpanel3)
        canvasSizer.Add(self.subpanel4)

        top_content_sizer.AddSpacer(20)
        top_content_sizer.Add(button_sizer)
        top_content_sizer.AddSpacer(20)
        top_content_sizer.Add(canvasSizer)
        panel.SetSizer(top_content_sizer)
        top_content_sizer.Fit(self)

    def create_status_bar(self):
        self.statusbar = self.CreateStatusBar()

    def on_button1(self, _event):
        do_it(self, _event)
        print 'B1'


    def on_button2(self, _event):
        self.subpanel1.draw(self.data)

    def on_save_plot(self, _event):
        pass

    def on_exit(self, _event):
        sys.exit()


def runIt():
    app = wx.PySimpleApp()
    frame=GraphFrame()
    frame.Show()
    app.MainLoop()


if __name__ == '__main__':
    runIt()
-Wie kann ich denn jetzt die Größe dieser CanvasPanel's ändern?
-Wo steht so was (Doku)?

Danke
joh
Antworten