Flagi wx.ALIGN* w wxpython

0

Witam Wszystkich.

Pytanie dotyczy wxPythona i konkretnie flag przy dodawaniu kontrolek do sizerów.

Czy zastosowanie jednocześnie dwóch flag naraz wx.ALIGN_LEFT | wx.ALIGN_RIGHT jest sprzeczne?
Przy takim zapisie przyciąga albo do lewej albo do prawej a wydawało by się, że powinno równocześnie i do lewej i do prawej.
Nigdzie w internecie nie znalazłem informacji aby nie używać razem wx.ALIGN_LEFT | wx.ALIGN_RIGHT albo wx.ALIGN_TOP | wx.ALIGN_BOTTOM.
Chodzi o uzyskanie efektu rozciągnięcia kontrolki tylko horyzontalnie albo wertykalnie.

Tak samo użycie czterech flag razem czyli wx.ALIGN_LEFT | wx.ALIGN_RIGHT | wx.ALIGN_TOP | wx.ALIGN_BOTTOM wydawało by się równoważne jednej wx.EXPAND a nie jest. Bo kontrolka jest przyciągana tylko do jednego rogu.

Może ktoś ma jakieś doświadczenie w wxPython i by się wypowiedział dlaczego to nie działa.

Dodam również, że w Tkinter jest taki zapis
sticky=(N, S, E, W) który pozwala rozciągnąć obiekt we wszystkich kierunkach
sticky=(N, S) który pozwala rozciągnąć obiekt wertykalnie
sticky=(E, W) który pozwala rozciągnąć obiekt horyzontalnie

Pozdrawiam

0

Chodzi mi o uzyskanie takiego efektu

Ustawienie flag dla kontrolki

               wx.ALIGN_TOP
                    |
                 +--*--+
 wx.ALIGN_LEFT - *(c,r)* - wx.ALIGN_RIGHT
                 +--*--+
                    |
             wx.ALIGN_BOTTOM


Przed rozciągnięciem okna
+=========+=========+=========+  
| +--*--+ | +--*--+ | +--*--+ |
| *(0,0)| | *(0,1)* | |(0,2)* |
| +-----+ | +-----+ | +-----+ |
+---------+---------+---------+  
| +--*--+ | +--*--+ | +--*--+ |         
| *(1,0)| | *(1,1)* | |(1,2)* |
| +--*--+ | +--*--+ | +--*--+ |
+---------+---------+---------+
| +-----+ | +-----+ | +-----+ |         
| *(2,0)| | *(2,1)* | |(2,2)* |
| +--*--+ | +--*--+ | +--*--+ |
+---------+---------+---------+


Po rozciągnięciu okna spodziewał bym się takiego efektu, który jednak nie występuje.
+=============+=============+=============+  
| +--*--+     | +----*----+ |     +--*--+ |
| *(0,0)|     | *  (0,1)  * |     |(0,2)* |
| +-----+     | +---------+ |     +-----+ |
|             |             |             |      
|             |             |             |
+-------------+-------------+-------------+  
| +--*--+     | +----*----+ |     +--*--+ |  
| |     |     | |         | |     |     | |
| *(1,0)|     | *  (1,1)  * |     |(1,2)* |
| |     |     | |         | |     |     | |
| +--*--+     | +----*----+ |     +--*--+ |
+-------------+-------------+-------------+
|             |             |             |
|             |             |             |
| +-----+     | +---------+ |     +-----+ |         
| *(2,0)|     | *  (2,1)  * |     |(2,2)* |
| +--*--+     | +----*----+ |     +--*--+ |
+-------------+-------------+-------------+

Zastosowane flagi dają taki efekt po rozciągnięciu okna
+=============+=============+=============+  
| +--*--+     |     +--*--+ |     +--*--+ |
| *(0,0)|     |     *(0,1)* |     |(0,2)* |
| +-----+     |     +-----+ |     +-----+ |
|             |             |             |      
|             |             |             |
+-------------+-------------+-------------+  
|             |             |             |  
|             |             |             |
| +--*--+     |     +--*--+ |     +--*--+ |
| *(1,0)|     |     *(1,1)* |     |(1,2)* |
| +--*--+     |     +--*--+ |     +--*--+ |
+-------------+-------------+-------------+
|             |             |             |
|             |             |             |
| +-----+     |     +-----+ |     +-----+ |         
| *(2,0)|     |     *(2,1)* |     |(2,2)* |
| +--*--+     |     +--*--+ |     +--*--+ |
+-------------+-------------+-------------+
0

Poniżej zamieszczam kod do testowania.

import wx

app = wx.App()
master = wx.Frame(None)
master.SetBackgroundColour("white")
gbs = wx.GridBagSizer(2,2)
flagcol = {0: wx.ALIGN_LEFT, 1: wx.ALIGN_LEFT | wx.ALIGN_RIGHT, 2: wx.ALIGN_RIGHT}
flagrow = {0: wx.ALIGN_TOP,  1: wx.ALIGN_TOP | wx.ALIGN_BOTTOM, 2: wx.ALIGN_BOTTOM}

for r in range(3):
    for c in range(3):
        p = wx.Panel(parent=master, size=wx.Size(50, 50))
        p.SetBackgroundColour((20*c*r,50*r,80*c))
        gbs.Add(item=p, pos=(r, c), flag=flagcol[c] | flagrow[r])
        if not gbs.IsColGrowable(c):
            gbs.AddGrowableCol(c, 1)
    gbs.AddGrowableRow(r, 1)

master.SetSizerAndFit(gbs)
master.Layout()
master.Show()
app.MainLoop()

Okno przed rozciagnięciem
Okno przed rozciagnięciem.png

Okno po rozciagnięciu
Okno po rozciagnięciu.png

I pytanie wciąż brzmi, dlaczego są ignorowane niektóre flagi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1