Größe eines Elements dynamisch verändern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
darkG0D
User
Beiträge: 10
Registriert: Montag 10. April 2006, 19:00

Hallo,

ich möchte die Größe eines Elements dynamisch verändern. Dies klappt prinzipiell auch, aber wenn ich das Fenster mit der Maus vergrößere, wird das Element (Gauge) wieder in der ursprünglichen Größe dargestellt.

Kann mir jemand einen Hinweis geben, was ich noch aufrufen muss (hatte etliche Versuche durchgeführt, aber keine mit Erfolg).

Danke schon einmal im Voraus.

Code: Alles auswählen

import wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="SetSize test")
        self.panel = wx.Panel(self)

        self.vsizer = wx.BoxSizer(wx.VERTICAL)
        btn = wx.Button(self, -1, 'gauge size', pos = (10,50))
        btn.Bind(wx.EVT_LEFT_DOWN, self.btn)
        self.w = wx.Gauge(self, -1, 100, (10, 10), (200, 20))
        
        self.vsizer.Add(self.w)
        self.vsizer.Add(btn)
        
        self.SetSizer(self.vsizer)
        
    
    def btn(self, event):
        self.w.SetSize((100,10))
        

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

So?

Code: Alles auswählen

import wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="SetSize test")
        self.panel = wx.Panel(self)
        
        self.vsizer = wx.BoxSizer(wx.VERTICAL)
        gauge_sizer = wx.BoxSizer(wx.HORIZONTAL)
        
        btn = wx.Button(self, -1, 'gauge size')
        gauge = wx.Gauge(self)
        gauge_sizer.Add(gauge, 1, wx.EXPAND)
        
        self.vsizer.Add(gauge_sizer, 0, wx.EXPAND)
        self.vsizer.Add(btn)
       
        self.SetSizer(self.vsizer)

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop() 
Sizer und eigene Größen zu verwenden ist eigentlich immer eine schlechte Idee.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
darkG0D
User
Beiträge: 10
Registriert: Montag 10. April 2006, 19:00

Danke für die Beschäftigung mit meiner Frage.

Es ist mir bewusst, dass der Vorteil von Sizern ja gerade darin liegt, dass man sich um Größen und Positionen keine Gedanken mehr zu machen braucht.

Den Gauge, den ich verwenden möchte, möchte ich nicht so hoch haben (Height), wie er mir ursprünglich kreiert wird. Zwar kann ich über Init bzw. Create die size festlegen, allerdings möchte ich den kompletten Dialog eigentlich über eine XRC-Datei erstellen und dort habe ich die Möglichkeit einer ursprünglichen Größe (eigentl. Höhe) nicht (gefunden).

Der von mir gelistete Code sollte nur eine Vereinfachung meines Problem seins. Leider löst der Code von jbs dieses Problem nicht.

Trotzdem Danke für die Bemühungen.. ich hoffe ja noch auf weitere Ideen.
darkG0D
User
Beiträge: 10
Registriert: Montag 10. April 2006, 19:00

Habe mir das .xrc file mal im Quellcode angeschaut und die folgenden Zeilen verwendet:

<object class="wxGauge" name="Progress">
<size>-1,10</size>
</object>

Mit dem <size>-Tag konnte ich den Sizer mit seiner ursprünglichen Größe verändern. XRCed bietet aber nicht die Möglichkeit(?), diese Size festzulegen (auch wenn ich dieses XRC file lade, wird es mir in XRCed 0.2.0-5 falsch dargestellt (in meiner Applikation jedoch richtig).

Damit ist mein ursprüngliches Problem gelöst.

Gruß.
darkG0D
User
Beiträge: 10
Registriert: Montag 10. April 2006, 19:00

Ist wohl doch schon zu spät heute. Kann man in XRCed in den Attributes unter "Size" schon einstellen. Wird auch richtig angezeigt (hatte falsches .XRC-file geladen).

Sorry für diese Flut an Nachrichten.
Antworten