wx.grid "ignoriert" proportion des Sizers

Plattformunabhängige GUIs mit wxWidgets.
Sören
User
Beiträge: 5
Registriert: Montag 18. Januar 2016, 12:11

wx.grid "ignoriert" proportion des Sizers

Beitragvon Sören » Dienstag 31. Mai 2016, 10:16

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

  1. #!/usr/bin/python
  2. # -*- coding: latin-1 -*-
  3.  
  4. import wx
  5. import wx.grid as gridlib
  6.  
  7.  
  8. class Foo(wx.Panel):
  9.     def __init__(self, parent):
  10.         wx.Panel.__init__(self, parent)
  11.        
  12.         self.sizer = wx.BoxSizer(wx.VERTICAL)
  13.        
  14.         self.heading = wx.StaticText(self, -1, " Foo:", size=(-1,25))
  15.         self.heading.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
  16.        
  17.         # Option1: Keine Vorgabe
  18.         self.grid = gridlib.Grid(self)
  19.         # Option2: Fixe Größenvorgabe
  20.         #self.grid = gridlib.Grid(self, size=(-1, wx.DisplaySize()[1]/5))
  21.  
  22.        
  23.         self.grid.CreateGrid(20,5)
  24.        
  25.         self.sizer.Add(self.heading, 0)
  26.         self.sizer.Add(self.grid, 0)
  27.        
  28.         self.SetSizer(self.sizer)
  29.  
  30. class Bar(wx.Panel):
  31.     def __init__(self, parent):
  32.         wx.Panel.__init__(self, parent)
  33.        
  34.         self.sizer = wx.BoxSizer(wx.VERTICAL)
  35.        
  36.         self.heading = wx.StaticText(self, -1, " Bar:", size=(-1,25))
  37.         self.heading.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
  38.        
  39.         # Option1: Keine Vorgabe
  40.         self.grid = gridlib.Grid(self)
  41.         # Option2: Fixe Größenvorgabe
  42.         #self.grid = gridlib.Grid(self, size=(-1, wx.DisplaySize()[1]/5))
  43.  
  44.        
  45.         self.grid.CreateGrid(20,5)
  46.        
  47.         self.sizer.Add(self.heading, 0)
  48.         self.sizer.Add(self.grid, 0)
  49.        
  50.         self.SetSizer(self.sizer)
  51.        
  52. class Frame(wx.Frame):
  53.    
  54.     def __init__(self):
  55.         wx.Frame.__init__(self, None, wx.ID_ANY,"Testframe")
  56.    
  57.         # Frameeinstellungen
  58.         self.SetSize((wx.DisplaySize()[0]/2, wx.DisplaySize()[1]/2))
  59.         self.SetMinSize((wx.DisplaySize()[0]/2, wx.DisplaySize()[1]/2))
  60.         self.SetPosition((0,0))
  61.        
  62.         # Framecontent
  63.         self.sizer = wx.BoxSizer(wx.VERTICAL)
  64.        
  65.         self.foo = Foo(self)
  66.         self.bar = Bar(self)
  67.        
  68.         self.sizer.Add(self.foo, 1, wx.EXPAND)
  69.         self.sizer.Add(self.bar, 1, wx.EXPAND)
  70.        
  71.         self.SetSizer(self.sizer)
  72.  
  73. if __name__ == '__main__':
  74.     app = wx.App(False)
  75.     my_frame = Frame().Show()
  76.     app.MainLoop()
  77.     pass
BlackJack

Re: wx.grid "ignoriert" proportion des Sizers

Beitragvon BlackJack » Dienstag 31. Mai 2016, 10:28

@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.
Sören
User
Beiträge: 5
Registriert: Montag 18. Januar 2016, 12:11

Re: wx.grid "ignoriert" proportion des Sizers

Beitragvon Sören » Dienstag 31. Mai 2016, 12:37

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
Zuletzt geändert von Anonymous am Dienstag 31. Mai 2016, 12:49, insgesamt 1-mal geändert.
Grund: Bilder mit img-Tag eingebunden.
BlackJack

Re: wx.grid "ignoriert" proportion des Sizers

Beitragvon BlackJack » Dienstag 31. Mai 2016, 12:51

@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.
Sören
User
Beiträge: 5
Registriert: Montag 18. Januar 2016, 12:11

Re: wx.grid "ignoriert" proportion des Sizers

Beitragvon Sören » Dienstag 31. Mai 2016, 13:03

Mmmmh.
Also passt es unter Linux und unter Windows passt es nicht.
Gibt es einen Linux-Default-Style, den man unter Windows erzwingen kann?
BlackJack

Re: wx.grid "ignoriert" proportion des Sizers

Beitragvon BlackJack » Dienstag 31. Mai 2016, 13:11

@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. ;-)
ntrunk
User
Beiträge: 83
Registriert: Sonntag 7. September 2008, 23:09
Wohnort: Buchen (Odenwald)

Re: wx.grid "ignoriert" proportion des Sizers

Beitragvon ntrunk » Dienstag 31. Mai 2016, 15:18

@Sören:
du musst auch den inneren Sizern mitteilen, dass das Grid expandieren soll:
  1.         # Zeilen 26 u. 48
  2.         self.sizer.Add(self.grid, 1, wx.EXPAND)

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]