Sizer höhe einstellen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Zwiebel
User
Beiträge: 1
Registriert: Freitag 16. März 2012, 19:06

Hallo Python Gemeinde!

Folgende Situation:
Ich habe ein Panel mit 2 Sizer und einem ListCtrl Feld.
Der Aufbau ist Vertikal gestaltet. Zuerst ein GridSizer dann das ListCtrl und zum Schluss das zweite GridSizer.
Funktioniert auch soweit ganz gut. Lediglich stört mich das Verhältnis der Größen.
Ist es möglich das untere GridSizer(das zweite) ein wenig einzustauchen damit das ListCtrl mehr Platz nach unten hat?
Gäbe es als ansonsten vielleicht eine andere Methode das ganze darzustellen?

Und natürlich kommt noch der (schlecht kommentierte) Quellcode hinterher.

Grüße
Daniel

Edit: Ok habs durch "wildes herumprobieren" gefunden ^^
der zweite parameter entscheidet über den Platz der eingenommen wird.

Code: Alles auswählen

sizer.Add(grid, 1, wx.EXPAND, 0)
sizer.Add(self.lc, 2, wx.EXPAND, 0)
sizer.Add(command, 0, wx.ALL, 0)

Code: Alles auswählen

#!/usr/bin/python
# coding: utf-8
import wx, wx.html
import wx.lib.mixins.listctrl as listmix
import sys

class EditableListCtrl(wx.ListCtrl, listmix.TextEditMixin):
    def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition,
                 size=wx.DefaultSize, style=0):
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
        listmix.TextEditMixin.__init__(self)

class Neu(wx.Frame, listmix.TextEditMixin):
    def __init__(self, title, typ):
        wx.Frame.__init__(self,None, -1, title=title, pos=(175,175), size=(300,400))
        panel = wx.Panel(self)
        ##Gemeinsame Felder
        static1 = wx.StaticText(panel, -1, "Firma: ")
        input1 = wx.TextCtrl(panel, -1)
        button1 = wx.Button(panel, -1, label="v")
        static2 = wx.StaticText(panel, -1, "Person: ")
        input2 = wx.TextCtrl(panel, -1)
        button2 = wx.Button(panel, -1, label="v")
        leer1 = wx.StaticText(panel, -1, "")
        leer2 = wx.StaticText(panel, -1, "")
        leer3 = wx.StaticText(panel, -1, "")
        save = wx.Button(panel, -1, label="Speichern")
        self.Bind(wx.EVT_BUTTON, self.OnSave, save)
        command = wx.GridSizer(1, 3, 0, 0)
        grid = wx.GridSizer(2, 3, 0, 0)
        grid.AddMany([  (static1, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL),
                        (input1, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                        (button1, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                        (static2, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL),
                        (input2, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                        (button2, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL)
                    ])
        sizer = wx.BoxSizer(wx.VERTICAL)
        if typ == 1:
            ## Programm
            self.lc = EditableListCtrl(panel, style=wx.LC_REPORT)
            self.lc.InsertColumn(0, 'Datei')
            self.lc.InsertColumn(1, 'MD5-Summe')
            self.lc.SetColumnWidth(0, 75)
            self.lc.SetColumnWidth(1, 210)
            self.lc.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
            self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.lc)
            grid.SetRows(6)
            static3 = wx.StaticText(panel, -1, "Datum: ")
            input3 = wx.TextCtrl(panel, -1)
            button3 = wx.Button(panel, -1, label="v")
            static4 = wx.StaticText(panel, -1, "Ablageort: ")
            input4 = wx.TextCtrl(panel, -1)
            button4 = wx.Button(panel, -1, label="v")
            grid.AddMany([  (static3, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL),
                            (input3, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                            (button3, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                            (static4, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL),
                            (input4, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                            (button4, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL)
                        ])
            command.AddMany([   (leer1, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                                (leer2, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL),
                                (save, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL)
                            ])
            
            sizer.Add(grid, 0, wx.EXPAND, 0)
            sizer.Add(self.lc, 1, wx.EXPAND, 0)
            sizer.Add(command, 2, wx.ALL, 0)
            
        elif typ == 2:
            ## Kunde
            sizer.Add(grid, 0, wx.EXPAND, 0)
            sizer.Add(command, 1, wx.EXPAND, 0)
        panel.SetSizer(sizer)
    
    def OnSave(self,event):
        print "save"
    def OnRightClick(self,event):
        if not hasattr(self, "popupID1"):
            self.popupID1 = wx.NewId()
            self.popupID2 = wx.NewId()
            
            self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
            self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
            
        Rmenu = wx.Menu()
        Rmenu.Append(self.popupID1, "Add")
        Rmenu.Append(self.popupID2, "Del")

        self.PopupMenu(Rmenu)
        Rmenu.Destroy()
    
    def OnPopupOne(self, event):
        index = self.lc.GetItemCount()
        self.lc.InsertStringItem(index, "Datei")
        self.lc.SetStringItem(index, 1, "MD5")
    def OnPopupTwo(self, event):
        self.lc.DeleteItem(self.currentItem)
    def OnItemSelected(self, event):
        self.currentItem = event.m_itemIndex
        event.Skip()
        
app = wx.App(redirect=True)
top = Neu("neues Programm",1)
top.Show()
app.MainLoop()
Zuletzt geändert von Leonidas am Mittwoch 13. Juni 2012, 02:37, insgesamt 2-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Antworten