Fenstergrösse

Plattformunabhängige GUIs mit wxWidgets.
Antworten
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Hallo,
Gibt es unter WxPython eine Möglichkeit ein Fenster um einen bestimmten Prozentsatz zu vergrössern oder zu verkleinern!
Gruß, Harry
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

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() )
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

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.
Gruß, Harry
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.
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

^das war ich... Sorry, hatte vergessen mich anzumelden... :wink:
Antworten