Seite 1 von 1

Fenstergrösse

Verfasst: Freitag 16. Januar 2004, 12:39
von HarryH
Hallo,
Gibt es unter WxPython eine Möglichkeit ein Fenster um einen bestimmten Prozentsatz zu vergrössern oder zu verkleinern!

Verfasst: Freitag 16. Januar 2004, 14:27
von Christopy
Hallo HarryH

Ich denke, dass es mit SetSize() am einfachsten geht. Im folgenden Beispiel wird ein Fenster jeweil um 20% vergrössert oder verkleinert bei entsprechender Buttonbetätigung. Dabei ist die Ausgangsgröße die kleinste Größe die so zu erreichen ist.

Code: Alles auswählen

from wxPython.wx import *

class MyFrame(wxFrame):
    def __init__(self, *args, **kwds):
        kwds["style"] = wxDEFAULT_FRAME_STYLE
        wxFrame.__init__(self, *args, **kwds)
        
        self.button_g = wxButton(self, wxNewId(), "verbroessern")
        self.button_k = wxButton(self, wxNewId(), "verkleinern")
        
        EVT_BUTTON( self, self.button_g.GetId(), self.OnButtonGroesser) 
        EVT_BUTTON( self, self.button_k.GetId(), self.OnButtonKleiner) 
        
        sizer_1 = wxBoxSizer(wxVERTICAL)
        sizer_1.Add(self.button_g, 0, wxEXPAND, 0)
        sizer_1.Add(self.button_k, 0, wxEXPAND, 0)
        self.SetAutoLayout(1)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        sizer_1.SetSizeHints(self)
        self.Layout()
        
    def OnButtonGroesser( self, event ):        
        bound = self.GetRect()
        bound.SetHeight( int(bound.GetHeight() * 1.2) )
        bound.SetWidth( int(bound.GetWidth() * 1.2) )
        self.SetSize( bound.GetSize() )
        
    def OnButtonKleiner( self, event ):
        bound = self.GetRect()
        bound.SetHeight( int(bound.GetHeight() * 0.8) )
        bound.SetWidth( int(bound.GetWidth() * 0.8) )
        self.SetSize( bound.GetSize() )

re:

Verfasst: Montag 19. Januar 2004, 11:14
von HarryH
Hallo Christopy,

Ja, so ähnlich habe ich das bei meinem Programm auch gemacht.
Ich habe jede definierte Grösse eines jeden Widget meines Programmes mit einem einstellbaren Wert, den ich in einer Variable gespeichert habe, multipliziert.
Das ist aber ziemlich aufwendig, besonders bei vielen Widgets oder wenn man andere Klassen impotiert.
Aber vielleicht gibt es eine Möglichkeit, alle zu einem Programm gehörigen Komponenten um einen bestimmten Faktor zu vergrößern oder zu verkleinern. An so etwas hätte ich gedacht.

Verfasst: Montag 19. Januar 2004, 18:09
von Gast
Hallo HarryH
verstehe. Für alle Komponenten ist das tatsächlich ein wenig aufwendig :wink:
Vielleicht ist es dann am einfachsten die Arbeit dem Sizer zu überlassen. Um beim obigen Beispielcode zu bleiben, könnte man nach jedem SetSize() noch ein self.Layout() anfügen, dann werden die Buttons wieder neu angepasst.

Verfasst: Montag 19. Januar 2004, 18:25
von Christopy
^das war ich... Sorry, hatte vergessen mich anzumelden... :wink: