ich versuche mich gerade seit kurzem ein wenig mit Python und wxWindows. Aber gleich beim ersten GUI-Programm komme ich irgendwie nicht weiter.
Ziel war es, im oberen Teil der Maske eine (möglicherweise große) Tabelle zu haben und unten ein paar Buttons. Die Tabelle im Testskript ist so groß bzw. das Hauptfenster so klein, dass ich in der Tabelle Scrollbars erwarte.
Wenn ich nun wie in Zeile 18 im folgenden Skript beim Erzeugen des Grids "size=(1,1)" verwende, so erscheinen die Scrollbars beim Aufblenden des Fensters. Wird das Hauptfenster vergrößert, so verschwinden die Scrollbars erwartungsgemäß, wenn die ganze Tabelle sichtbar ist. Wird aber anschließend das Fenster wieder verkleinert, so verhält sich das Programm unter Linux anders als unter Windows: Unter Linux erscheinen die Scrollbars wieder, unter Windows jedoch nicht. Damit ist die Tabelle unter Windows eigentlich nicht mehr bedienbar.
Wenn ich aber wie in Zeile 17 des Skripts beim Erzeugen des Grids "size=wx.DefaultSize" schreibe oder den Parameter weglasse, so sieht man zunächst keine Scrollbars, erst wenn man das Hauptfenster vergrößert, erscheinen sie kurz bevor sie dann nicht mehr benötigt werden und wieder verschwinden
Frage nun:
a) Warum erscheinen unter Windows die Scrollbalken nicht wieder, wenn ich das Fenster vergrößert und dann wieder verkleinert habe?
b) Was genau besagt /wie wirkt der Parameter size im Grid? Anscheinend legt er die (Anfangs-)Größe des "sichtbaren" Bereichs des Grids fest und wenn nicht alle Zeilen und/oder Spalten in diesen sichtbaren Bereich passen, dann erscheinen die Scrollbars am Rande dieses Bereichs? Dabei kann es durchaus sein, das dieser "sichtbare" Bereich nicht sichtbar ist, weil das Hauptfenster zu klein ist?
c) Wenn ich für das Grid eine Standardgröße, z.B. wx.Defaultsize, festlege, müsste dann nicht das Hauptfenster so berechnet sein, dass das Grid in dieser Größe sichtbar ist?
d) Gibt es eine Möglichkeit festzulegen, dass das Fenster nicht größer als notwendig aufgezogen werden kann, also Schluss ist, wenn das Grid vollständig sichtbar ist?
Bin für alle Hinweise und (Teil-)Antworten dankbar.
Viele Grüße,
aki
Code: Alles auswählen
# -*- coding: cp1252 -*-
import wx
import wx.grid
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetTitle("FrameTest")
# ein Panel
self.panel = wx.Panel(self)
# ein Grid
# self.grid = wx.grid.Grid(self.panel, -1, size=wx.DefaultSize)
self.grid = wx.grid.Grid(self.panel, -1, size=(1,1))
self.grid.CreateGrid(20, 10)
# zwei Buttons
self.btn_Speichern = wx.Button(self.panel, -1, "Speichern")
self.btn_Cancel = wx.Button(self.panel, -1, "Abbrechen")
# H-Sizer für Buttons
h_sizer = wx.BoxSizer(wx.HORIZONTAL)
# Buttons in H-Sizer einfügen
h_sizer.Add(self.btn_Speichern, 0, 0, 0)
h_sizer.Add(self.btn_Cancel, 0, 0, 0)
# V-Sizer für Grid (oben) und Button-Zeile (unten)
v_sizer = wx.BoxSizer(wx.VERTICAL)
# Grid und H-Sizer in V-Sizer einfügen
v_sizer.Add(self.grid, 1, wx.LEFT|wx.RIGHT|wx.EXPAND, 10)
v_sizer.Add(h_sizer, 0, wx.LEFT|wx.RIGHT, 20)
# Layout des Panels
self.panel.SetAutoLayout(True)
self.panel.SetSizer(v_sizer)
v_sizer.Fit(self.panel)
v_sizer.SetSizeHints(self.panel)
# # Layout des Frames
# self.SetAutoLayout(True)
# self.Layout()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(parent=None)
frame.Show()
self.SetTopWindow(frame)
return True
def main():
app = MyApp()
app.MainLoop()
if __name__ == '__main__':
main()