Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:python:wxpython_gui:wxpython_meretezok

< wxPython GUI

wxPython méretezők

Közös Jellemzők

Minimális méret

Általában a minimális méret megegyezik a komponensek kezdeti méretével, de beállítható a wx.Size mezőben. Nem minden komponens képes kiszámítani a méretét. A listák, például nem rendelkeznek természetes szélességgel és magassággal. De van olyan vezérlő, amely kiszámíthatja a magasságát, de szélességét nem. Ilyen az egy soros szövegvezérlő.

Szegély

A szegély egy üres hely, amely komponensek elválasztására szolgál, és általában 5 pont széles.

Igazítás

Ha a komponenseknek rendelkezésre áll hely, akkor azon belül igazíthatók, jobbra, balra és középre.

Nyúlás

Beállíthatjuk, arányaiban mennyi helyet foglaljon egy komponens. A következő képen az első gomb 2, a másik két gomb 1 arány van beállítva.

Komponens hozzáadása

Szintaxis:

Add( komponens, arány=0 , jelző=0 , szegély=0 , userData=Nincs )
  • komponens: ablak (vezérlők és statikus komponensek), helykitöltők és újabb méretezők hozzáadása. A kezdeti méret a minimális
  • arány: a méretező gyermeke, meg tudja-e változtatni méretét a többi gyermekhez viszonyítva.
  • jelző: jelzők vagylagos kombinációja, ami befolyásolja a méretező viselkedését.
  • szegély: a szegély méretét adhatjuk meg. A szegélyt jelzővel is jelezni kell.
  • userData: extra objektum csatolása a méretező elemhez.

Készítsünk egy függőleges elrendezésű méretezőt (ez a gyermek elemeket egymásra helyezi), majd tegyünk bele két gombot. Az összes extra paraméter 0-ra állítjuk.

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 0, 0, 0)
self.SetSizer(sizer1)
  • Az ilyen módon elhelyezett elemek, a minimális méretet veszik fel.
  • Az ablak nem változtatja meg a méretét, hogy illeszkedjen az elemekhez.

Most igazítsuk az ablak méretét a benne található tartalomhoz.

        sizer1 = wx.BoxSizer(wx.VERTICAL)
        sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
        sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 0, 0, 0)
        sizer1.SetSizeHints(self)
        self.SetSizer(sizer1)

Ez hasznos, ha az alapértelmezett ablakméret nem megfelelő.

Arány paraméter

A sizer1.Add() első paramétere a hozzáadott wx.Window egy leszármazottja, ahogy azt eddig is láttuk. A második paraméter a gyermek elemek mérete, egymáshoz képest, vagyis egy arány. Ha méretező függőleges elrendezésű, akkor függőlegesen határozza meg a gyermekelemek mennyi helyet foglaljanak.

Ebben a példában az első gomb 1 arányszámot, míg a másik gomb 3-s arányszámot kapott.

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 1, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 3, 0, 0)
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Az alsó gomb 3-szor magasabb mint a felső.

Most legyen a felső gombnak az aránya 5, az alsónak 2:

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 5, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 2, 0, 0)
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Ha egy elemnek az aránya 0, akkor minimális méretet veszi fel.

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 1, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Harmadik gomb'), 2, 0, 0)
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Ugyanazokkal a beállításokkal, de az ablakot nem állítjuk a tartalomhoz:

Ez jól jön, ha szeretnénk az egyik elemünk, csak minimális helyet foglaljon, a többi pedig töltse ki rendelkezésre álló helyet.

Jelzők és a szegély paraméter

A harmadik paraméter a jelzők helye, ahol VAGY operátorral kombináljuk az összes jelzőket. Két viselkedést határozunk meg ezekkel a jelzőkkel. Az egyik az ablak (komponens vagy elem) körül, hol legyen szegély. A másik, a méretező változása esetén, hogyan viselkedjen az elem. A negyedik paraméter a szegély szélessége.

wx.TOP
wx.BOTTOM
wx.LEFT
wx.RIGHT
wx.ALL
Hol legyen szegély
wx.EXPAND Az elem töltse ki a rendelkezésre álló helyet.
wx.SHAPED Az elem vegye fel a lehető legnagyobb méretet, az arányok megtartásával.
wx.FIXED_MINSIZE A wx.Sizer általában a wx.Window.GetEffectiveMinSize segítségével
határozza meg a méretet. Ha szeretnénk az eredeti minimális
méretet, használjuk a wx.FIXED_MINSIZE-t.
wx.RESERVE_SPACE_EVEN_IF_HIDDEN Általában a wx.Sizer nem foglal helyet rejtett ablakokhoz.
Ez a jelző felülbírálja ezt a viselkedést.
wx.ALIGN_CENTER vagyr wx.ALIGN_CENTRE
wx.ALIGN_LEFT
wx.ALIGN_RIGHT
wx.ALIGN_RIGHT
wx.ALIGN_TOP
wx.ALIGN_BOTTOM
wx.ALIGN_CENTER_VERTICAL vagy wx.ALIGN_CENTRE_VERTICAL
wx.ALIGN_CENTER_HORIZONTAL vagy wx.ALIGN_CENTRE_HORIZONTAL
Igazítás a rendelkezésre álló helyen belül.

Nézzünk néhány igazítást.

Igazítás középre:

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 0, wx.ALIGN_CENTER, 0)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Igazítás jobbra:

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 0, wx.ALIGN_RIGHT, 0)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

A rendelkezésre álló hely elfoglalása, vagyis wx.EXPAND. Szinonima: wx.GROW.

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 0, wx.EXPAND, 0)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

A felső gomb felvette a minimális méretet, az alsó pedig megnőtt, és kitölti a rendelkezésre álló helyet. Ez a beállítás ellentétes módon működik a második paraméterrel. A wx.EXPAND függőleges méretezőben vízszintes nyúlást eredményez, vízszintes méretezőben függőleges nyúlást.

A következő a wx.SHAPED. Ez a jelző biztosítja, hogy az adott elem magassága és szélessége arányos maradjon. Gombok esetén ennek nem sok értelme van, de bitképek esetén, biztosítja, hogy egy kép ne torzuljon.

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 1, wx.SHAPED, 0)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Ugyanaz átméretezett ablakkal:

A valóságban függőlegesen nem annyira nőtt az arány, mert egy idő után nem nő.

Végül nézzük meg a szegélyjelzőket. Ha a negyedik paraméter negy nagyobb nullánál, ezeknek a jelzőknek nincs értelme.

Szegély baloldalon:

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 1, wx.EXPAND | wx.LEFT, 20)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Szegély kétoldalt:

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 20)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Két oldalon és felül:

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 1, 
          wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 20)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Szegély minden oldalon:

sizer1 = wx.BoxSizer(wx.VERTICAL)
sizer1.Add(wx.Button(self, -1, 'Valami hosszú szöveg a gombon'), 0, 0, 0)
sizer1.Add(wx.Button(self, -1, 'Rövid szöveg'), 1, 
          wx.EXPAND | wx.ALL, 20)        
sizer1.SetSizeHints(self)
self.SetSizer(sizer1)

Kontroll rejtése méretezővel

A méretezőben elhelyezett vezérlők rejthetők a wx.Window.Show metódussal, de a méretezők külön módszert biztosítanak erre a célra. Ehhez hívja a wx.Sizer.Show metódust. Ezt követően frissíteni kell az elrendezést.

Ezt hasznos, ha a felület egyes részeti el kell rejtenie.

Csak a wx.BoxSizer és a wx.FlexGridSizer támogatja.

Méretezők

BoxSizer

A BoxSizer függőlegesen és vízszintesen is elrendezheti a gyermekeit, attól főggően, hogy milyen jelzőt állítunk be a konstruktorban.

StaticBoxSizer

A StaticBoxSizer megegyezik a BoxSizer-el, de körülveszi egy statikus doboz.

rootBox = wx.BoxSizer(wx.HORIZONTAL)
sizer1 = wx.StaticBoxSizer(wx.HORIZONTAL, self, "Szöveg")
rootBox.Add(sizer1, 0, wx.ALL, 10)
sizer1.Add(wx.Button(self, -1, 'Ok'), 0, wx.LEFT | wx.TOP | wx.BOTTOM, 10)
sizer1.Add(wx.Button(self, -1, 'Ok'), 0, wx.LEFT | wx.TOP | wx.BOTTOM, 10)        
sizer1.Add(wx.Button(self, -1, 'Ok'), 0, wx.ALL, 10)        
rootBox.SetSizeHints(self)
self.SetSizer(rootBox)

GridSizer

A wx.GridSizer egy két dimenziós méretező. Minden gyermek azonos méretű helyet kap. A legnagyobb méretű gyermek határozza meg ezt a méretet. Az oszlopok és a sorok számra rögzítve van.

textctrl1 = wx.TextCtrl(self, -1, 'Szöveg', style=wx.TE_MULTILINE)
textctrl1.SetMinSize((150, 100))
textctrl2 = wx.TextCtrl(self, -1, 'Szöveg', style=wx.TE_MULTILINE)
textctrl2.SetMinSize((50, 100))
 
rootBox = wx.GridSizer(2, (0,0))
 
rootBox.Add(wx.CheckBox(self, -1, 'Jelölő'), 1, wx.ALL, 5)
rootBox.Add(wx.Button(self, -1, 'Ok'), 1, wx.ALL, 5)
 
rootBox.Add(textctrl1, 1, wx.EXPAND | wx.ALL, 5)
rootBox.Add(textctrl2, 1, wx.EXPAND | wx.ALL, 5)
 
rootBox.SetSizeHints(self)
self.SetSizer(rootBox)

FlexGridSizer

textctrl1 = wx.TextCtrl(self, -1, 'Szöveg', style=wx.TE_MULTILINE)
textctrl1.SetMinSize((150, 100))
textctrl2 = wx.TextCtrl(self, -1, 'Szöveg', style=wx.TE_MULTILINE)
textctrl2.SetMinSize((50, 100))
 
rootBox = wx.FlexGridSizer(2, (0,0))
 
rootBox.Add(wx.CheckBox(self, -1, 'Jelölő'), 1, wx.ALL, 5)
rootBox.Add(wx.Button(self, -1, 'Ok'), 1, wx.ALL, 5)
 
rootBox.Add(textctrl1, 1, wx.EXPAND | wx.ALL, 5)
rootBox.Add(textctrl2, 1, wx.EXPAND | wx.ALL, 5)
 
rootBox.SetSizeHints(self)
self.SetSizer(rootBox)

Programozás BoxSizer-rel

A wx.BoxSizer segítségével hierarchikus, soros és oszlopos elrendezést használhatunk.

Forrás

oktatas/programozas/python/wxpython_gui/wxpython_meretezok.txt · Utolsó módosítás: 2023/08/21 20:55 szerkesztette: admin