Ich bin hier langsam am verzweifeln. Seit zwei Tagen komme ich nun mit meinem Problem einfach nicht weiter und brauche ein wenig Input von euch
Folgendes: Ich möchte aus einer Liste ein Spiel auswählen und beim linksklicken des entsprechenden Spieles sollen mir im unteren Teil des Fensters die ersten 8 passenden Screenshots dargestellt werden.
Soweit so Gut. Halbwegs funktioniert das auch, jedoch habe ich folgende Probleme damit:
- Die Bilder werden erst richtig dargestellt, wenn ich das gesammt Fenster 1x Resize, dann minimiere und dann wieder öffne.
- Klicke ich zuerst auf ein Game mit 8 Screenshots, danach auf ein Game mit z.B. 3 Shots dann sieht man die (alten) 5 Shots noch, wie lösche ich die?
Hier mal ein Screenshot wie es aussehen sollte (Erreicht indem ich zuerst auf Larry 6 - VGA geklickt hatte, danach ein wenig das gesammte Fenster resized habe und dann noch kurz das Fenster minimiert und wieder hervorgeholt habe)
Und so sieht es aus, wenn ich mein Programm frisch gestartet und dann sogleich auf das Larry 6 - VGA Icon geklickt habe:
Ich habe Momentan echt keinen Plan woran das liegen könnte. Habe ich vielleicht die Sizer Falsch angewandt? Der Aufbau des ganzen ist folgendermassen:
Links und Rechts wird mittels (wx.SplitterWindow) unterteilt. Den Rechten Teil unterteile ich dann mittels (wx.FlexGridSizer) nochmals in eine obere und untere Hälfte. (FlexGrid habe ich gewählt, weil dadurch der untere Teil immer eine fixe Grösse behält.) im unteren Tel habe ich dann ein ScrolledWindow eingesetzt, welches wiederum einen BoxSizer enthält. Und in eben diesen BoxSizer möchte ich meine Bilder laden...
Hier mal die relevantesten Codestellen:
Code: Alles auswählen
[...]
##########
# Splitt Window into Left and Right with Sash
self.SplitterLeftRight = wx.SplitterWindow(self, -1, style=wx.SP_BORDER)
self.SplitterLeftRight.SetMinimumPaneSize(100)
# Splitt Window end
##########
##########
# Left Window (Tree List)
self.FrodoBoxSorter = wx.TreeCtrl(self.SplitterLeftRight)
[...]
##########
# Right Window (Notebook and Preview Window)
self.RightPanel = wx.Panel(self.SplitterLeftRight)
RightUpDownSizer = wx.FlexGridSizer(2, 1, 0, 0)
RightUpDownSizer.AddGrowableRow(0)
RightUpDownSizer.AddGrowableCol(0)
self.RightPanel.SetSizer(RightUpDownSizer)
# Right Window end
##########
##########
# Upper Right Window (Notebooks)
self.FrodoBoxNotebook = wx.Notebook(self.RightPanel, -1, style=wx.NB_TOP)
RightUpDownSizer.Add(self.FrodoBoxNotebook, 1, wx.EXPAND, 0)
# Icon List
[... Code welcher die Icon Liste kreiert ...]
# Icon List end
# Report List
[... Code welcher die Report Liste erstellt ...]
# Report List end
# Upper Right Window (Notebooks) end
##########
[...]
##########
# Lower Right Window (Preview)
#self.unten = wx.Panel(self.RightPanel)
self.unten = wx.ScrolledWindow(self.RightPanel, -1, style=wx.TAB_TRAVERSAL)
self.unten.SetMinSize((480, 105))
self.unten.SetScrollRate(1, 100)
self.PicSizer = wx.BoxSizer(wx.HORIZONTAL)
self.unten.SetSizer(self.PicSizer)
RightUpDownSizer.Add(self.unten,1,wx.EXPAND,0)
# Lower Right Window (Preview)
##########
[... Nachfolgender Code wird bei Klick auf entsprechendes Game ausgefuehrt ...]
def OnGameSelected(self, evt):
self.PicSizer = wx.BoxSizer(wx.HORIZONTAL)
self.unten.SetSizer(self.PicSizer)
capturePath = conf.FrodoConfigContent.get('frodobox-dirs', 'capturedir')
item = evt.GetItem()
gameName = item.GetText()
shortName = conf.FrodoProfiles.get(gameName, 'shortname')
globber = capturePath+conf.OsSeparator+shortName+"_[1-8].*"
files=glob.glob(globber)
files.sort()
for name in files:
img = wx.Image(name, wx.BITMAP_TYPE_ANY)
scaled = img.Scale(120, 75)
bitmap = wx.BitmapFromImage(scaled)
bild = wx.StaticBitmap(self.unten, -1, bitmap)
self.unten.Freeze()
self.PicSizer.Add(bild,1,wx.EXPAND,0)
self.unten.SetSizerAndFit(self.PicSizer)
self.unten.Thaw()
[...]
STiGMaTa