Seite 1 von 1

wx.grid "ignoriert" proportion des Sizers

Verfasst: Dienstag 31. Mai 2016, 10:16
von Sören
Hallo zusammen,

ich stehe bei einem ganz banallem Problem auf dem Schlauch und hoffe auf eure Hilfe.

Ich würde gerne zwei Tabellen (wx.grid) jeweils mit Überschrift untereinander in einem Frame anordnen (siehe Foo und Bar im Minimalbeispiel).
Dabei sollen die beiden Elemente Foo und Bar jeweils die Hälfte des im Frame vertikal zur Verfügung stehenden Platzes verwenden.

Um die Aufteilung zu erreichen, habe ich in Zeile 66 + 67 das Verhältnis 1:1 eingetragen. Leider "nimmt" sich Foo so viel Platz, wie es eben braucht, was bei länger werdenden Tabellen dazu führt, dass Bar irgendwann nicht mehr sichbar ist.

Um zu veranschaulichen, was ungefähr mein Ziel ist, habe ich die Option 2 (Kommentar in Zeile 18,20,40,42 bitte anpassen) gebaut.
Dabei wird dem grid eine feste vertikale Größe (ungefährt 50%) vorgegeben. Dies führt bezogen auf die erste Ansicht auch fast, da ja nur ungefährt 50%, zum gewünschten Ergebnis. Das diese Option nicht gut ist, ist mir klar, ganz abgesehen davon, dass beim Resizen keine Flexibilität mehr drinnen ist.

Mir ist nich klar, was ich bei Option 1ändern/ergänzen muss, um die proportionale Platzaufteilung zu erzwingen. Könnt ihr mir da weiterhelfen?

Vielen Dank,
Sören

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-

import wx
import wx.grid as gridlib


class Foo(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        
        self.heading = wx.StaticText(self, -1, " Foo:", size=(-1,25))
        self.heading.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
        
        # Option1: Keine Vorgabe
        self.grid = gridlib.Grid(self)
        # Option2: Fixe Größenvorgabe
        #self.grid = gridlib.Grid(self, size=(-1, wx.DisplaySize()[1]/5))

        
        self.grid.CreateGrid(20,5)
        
        self.sizer.Add(self.heading, 0)
        self.sizer.Add(self.grid, 0)
        
        self.SetSizer(self.sizer)

class Bar(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        
        self.heading = wx.StaticText(self, -1, " Bar:", size=(-1,25))
        self.heading.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
        
        # Option1: Keine Vorgabe
        self.grid = gridlib.Grid(self)
        # Option2: Fixe Größenvorgabe
        #self.grid = gridlib.Grid(self, size=(-1, wx.DisplaySize()[1]/5))

        
        self.grid.CreateGrid(20,5)
        
        self.sizer.Add(self.heading, 0)
        self.sizer.Add(self.grid, 0)
        
        self.SetSizer(self.sizer)
        
class Frame(wx.Frame):
    
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,"Testframe")
    
        # Frameeinstellungen
        self.SetSize((wx.DisplaySize()[0]/2, wx.DisplaySize()[1]/2))
        self.SetMinSize((wx.DisplaySize()[0]/2, wx.DisplaySize()[1]/2))
        self.SetPosition((0,0))
        
        # Framecontent
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        
        self.foo = Foo(self)
        self.bar = Bar(self)
        
        self.sizer.Add(self.foo, 1, wx.EXPAND)
        self.sizer.Add(self.bar, 1, wx.EXPAND)
        
        self.SetSizer(self.sizer)

if __name__ == '__main__':
    app = wx.App(False)
    my_frame = Frame().Show()
    app.MainLoop()
    pass

Re: wx.grid "ignoriert" proportion des Sizers

Verfasst: Dienstag 31. Mai 2016, 10:28
von BlackJack
@Sören: Ich kann das Problem nicht nachvollziehen. Bei mir nehmen beide Tabellen immer den gleichen vertikalen Platz ein, so wie Du das gerne haben möchtest. Allerdings werden nicht alle 20 Tabellenzeilen angezeigt solange man das Fenster nicht entsprechend gross zieht, also sollte man für Scrollbalken sorgen, damit auch Benutzer von kleineren Bildschirmen den gesamten Tabelleninhalt erreichen können.

Re: wx.grid "ignoriert" proportion des Sizers

Verfasst: Dienstag 31. Mai 2016, 12:37
von Sören
Hallo BlackJack,

ich habe ein paar Screenshots hochgeladen:
Option1:
Bild

Option2: Normal
Bild

Option2: Maximiert
Bild

Sieht es bei dir anders aus?

Viele Grüße,
Sören

Re: wx.grid "ignoriert" proportion des Sizers

Verfasst: Dienstag 31. Mai 2016, 12:51
von BlackJack
@Sören: Bei mir sieht Option 1 so aus wie Option 2 bei Dir, aber richtig wenn das Fenster vergrössert wird, allerdings ohne die Scrollbalken.

Re: wx.grid "ignoriert" proportion des Sizers

Verfasst: Dienstag 31. Mai 2016, 13:03
von Sören
Mmmmh.
Also passt es unter Linux und unter Windows passt es nicht.
Gibt es einen Linux-Default-Style, den man unter Windows erzwingen kann?

Re: wx.grid "ignoriert" proportion des Sizers

Verfasst: Dienstag 31. Mai 2016, 13:11
von BlackJack
@Sören: Naja, es passt nicht wirklich, denn wie gesagt sind bei mir dafür keine Scrollbalken. Cross plattform the wxPython way → auf jeder Plattform ist irgendwas kaputt. ;-)

Re: wx.grid "ignoriert" proportion des Sizers

Verfasst: Dienstag 31. Mai 2016, 15:18
von ntrunk
@Sören:
du musst auch den inneren Sizern mitteilen, dass das Grid expandieren soll:

Code: Alles auswählen

        # Zeilen 26 u. 48
        self.sizer.Add(self.grid, 1, wx.EXPAND)