ich beschäftige mich gerade das erste Mal mit wxPython, wie man wahrscheinlich schon am Titel sieht , und bräuchte ein paar Tipps wie ich das was mir vorschwebt umsetzen kann.
Ich möchte etwas in der Art wie in dem Paint-Bild hier erstellen:
Vereinfacht dargestellt habe ich bisher das hier gemacht:
Code: Alles auswählen
# -*- coding: utf-8 -*-
import wx
import wx.xrc
class Frame ( wx.Frame ):
def __init__( self ):
wx.Frame.__init__ ( self, None, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,500 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
gSizer1 = wx.GridSizer( 0, 2, 0, 0 )
self.search = wx.TextCtrl( self, wx.ID_ANY, u"", wx.DefaultPosition, wx.DefaultSize, wx.TE_CENTRE )
gSizer1.Add( self.search, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.button = wx.Button( self, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer1.Add( self.button, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
gSizer2 = []
for i in range(0,5):
self.pic = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer1.Add( self.pic, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
gSizer2.append(wx.GridSizer( 0, 2, 0, 0 ))
self.text = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_CENTRE|wx.TE_READONLY )
gSizer2[i].Add( self.text, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.pic2 = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2[i].Add( self.pic2, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.spin = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 10, 0 )
gSizer2[i].Add( self.spin, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.add = wx.Button( self, wx.ID_ANY, u"Add", wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2[i].Add( self.add, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
gSizer1.Add( gSizer2[i], 1, wx.EXPAND, 5 )
self.SetSizer( gSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.search.Bind( wx.EVT_TEXT, self.searchOnText )
self.button.Bind( wx.EVT_BUTTON, self.buttonOnButtonClick )
self.spin.Bind( wx.EVT_SPINCTRL, self.spinOnSpinCtrl )
self.add.Bind( wx.EVT_BUTTON, self.addOnButtonClick )
self.Show()
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def searchOnText( self, event ):
event.Skip()
def buttonOnButtonClick( self, event ):
event.Skip()
def spinOnSpinCtrl( self, event ):
event.Skip()
def addOnButtonClick( self, event ):
event.Skip()
app = wx.App()
window = Frame()
app.MainLoop()
Das habe ich jetzt hinbekommen. Ich würde allerdings gerne die Größe der einzelnen GridSizers irgendwie konstant halten und nicht an die Fenstergröße anpassen so, dass man eine Scrollbar oder ähnliches bekommt wenn nicht alles auf das Fenster passt.
Außerdem würde mich interessieren wie man es hinbekommt, dass die Anzahl der einzelnen Boxen (also die Häufigkeit, die die for-Schleife durchlaufen wird) variabel ist und nicht konstant bleibt. So wie ich das jetzt gemacht habe wird das ja irgendwie anfangs einmal erzeugt und danach kann ich es nicht mehr verändern.
Mache ich das überhaupt ansatzweise richtig oder sollte man das ganz anders angehen?
Würde mich über eine Antwort freuen. Auch wenn meine Frage wahrscheinlich ziemlich dumm ist.^^
Mit freundlichen Grüßen
Alex92