wxPython - BoxSizer maximieren sich nicht richtig. Problem!!

Plattformunabhängige GUIs mit wxWidgets.
Antworten
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Hi Leutz,

Also mein Problem besteht darin, dass beim maximieren meines Fensters die Oberfläche "zerwürfelt" wird. Um das besser nachvollziehen zu können habe ich mal ein Beispielprogramm im Anhang. Dies kann gleich so verwendet werden. Das "Programm" wird im maximierten Zustand geöffnet. Durch den Menüpunkt Start->Create werden 7 BoxSizer mit jeweils einem Panel erzeugt. Was nun zu sehen ist, ist ein übereinandergewürfel der Objekte. Wenn man jetzt die Ansicht. minimiert und dann wieder Maximiert. Ist das gewünschte Resultat zu sehen. Da ich den Usern aber nicht zumuten möchte immer ein minimieren und anschließendem maximieren des Fensters ertragen zu müssen, suche ich verzwifelt eine Lösung. Vielleicht kann mir einer von euch weiterhelfen.

Im Anhang der Beispielcode, der so herauskopiert werden kann und läuft.(müßt vielleicht Zeilen einrücken)

Code: Alles auswählen

from wxPython.wx import *
import os.path,time


class Main(wxFrame):
    def __init__(self, parent, ID, title,sRequestResult):
        wxFrame.__init__(self, parent, ID, title, wxDefaultPosition, wxDefaultSize)

        self.menu_File = wxMenu()
        self.menu_Config = wxMenu()
        self.menu_About = wxMenu()
        submenu = wxMenu()

        menuBar = wxMenuBar()
        self.menuBar = menuBar
        self.menuBar.Append(self.menu_File, '&Start')
        self.SetMenuBar(menuBar)

        self.menu_File.Append(1001,'create','create')
        EVT_MENU(self,1001,  self.OnCreate)

    def OnCreate(self,event):
        MySize = self.GetClientSizeTuple()
        Width = MySize[0]
        Height = MySize[1]

        self.panel2 = wxPanel(self, -1,wxPoint(wxDEFAULT),wxSize(wxDEFAULT),style=wxTAB_TRAVERSAL)
        self.panel3 = wxPanel(self, -1,wxPoint(wxDEFAULT), wxSize(Width/2,450),style = wxTAB_TRAVERSAL)
        self.panel4 = wxPanel(self,-1,wxPoint(wxDEFAULT),wxSize(wxDEFAULT),style=wxTAB_TRAVERSAL)
        self.panel5 = wxPanel(self, -1,wxPoint(wxDEFAULT),wxSize(2,Height))
        self.panel6 = wxPanel(self, -1,wxPoint(Width/2,0), wxSize(wxDEFAULT),style = wxTAB_TRAVERSAL)
        self.panel7 = wxPanel(self, -1,wxPoint(wxDEFAULT),wxSize(Width/2,450),style=wxTAB_TRAVERSAL)
        self.panel8 = wxPanel(self, -1,wxPoint(wxDEFAULT),wxSize(wxDEFAULT),style=wxTAB_TRAVERSAL)

        self.line =wxStaticLine(self.panel5,-1,wxPoint(0) , wxSize(2,Height), style = wxLI_VERTICAL|wxSUNKEN_BORDER)

        LabelBaust = wxStaticText(self.panel3, -1, 'Headline1',wxPoint(Width/7,30)) 
        LabelSzen = wxStaticText(self.panel7, -1, 'Headline2',wxPoint(Width/6,30))
        LabelBaust.SetForegroundColour('#0F498F')
        LabelSzen.SetForegroundColour('#0F498F')
        font = wxFont(18,wxSWISS , wxNORMAL, wxNORMAL,1)
        LabelBaust.SetFont(font)
        LabelSzen.SetFont(font)

        # ------ Feldpositionen des Panel 3 --------------------------------------------------------------------
        Height =100
        self.Height = Height
        leftTxtWidth =100
        self.leftTxtWidth=leftTxtWidth
        rightTxtWidth =300
        self.rightTxtWidth = rightTxtWidth
        leftLabWidth =30
        rightLabWidth =230
        TxtSizeWidth=120
        TxtSizeHeight = 20
        cbSizeWidth=100
        cbSizeHeight = 20
        l20 = wxStaticText(self.panel3, -1, 'label1',pos =(leftLabWidth,Height+5))
        t20 = wxTextCtrl(self.panel3, -1, 'string1',wxPoint(leftTxtWidth,Height),size=(TxtSizeWidth,TxtSizeHeight), style=wxTE_READONLY|wxTE_RICH,name= 'ROAD_ID')
        l21 = wxStaticText(self.panel3, -1, 'label2',pos =(leftLabWidth,Height+35))
        t21 = wxTextCtrl(self.panel3, -1, 'string2', wxPoint(leftTxtWidth,Height+30),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH,name='FROM_TOWN')
        l22 = wxStaticText(self.panel3, -1, 'label3',pos =(rightLabWidth,Height+35))
        t22 = wxTextCtrl(self.panel3, -1, 'string3', wxPoint(rightTxtWidth,Height+30),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH,name='TO_TOWN')
        l23 = wxStaticText(self.panel3, -1, 'label4:',pos =(leftLabWidth,Height+65))
        t23 = wxTextCtrl(self.panel3, -1, 'string4', wxPoint(leftTxtWidth,Height+60),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH,name='BETWEEN')
        l24 = wxStaticText(self.panel3, -1, 'label5',pos =(rightLabWidth,Height+65))
        t24 = wxTextCtrl(self.panel3, -1, 'string', wxPoint(rightTxtWidth,Height+60),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH,name='AND')
        l25 = wxStaticText(self.panel3, -1, 'label6',pos =(leftLabWidth,Height+95))
        t25 = wxTextCtrl(self.panel3, -1, 'string6', wxPoint(leftTxtWidth,Height+90),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH,name='C_FROM_KM')
        l26 = wxStaticText(self.panel3, -1, 'label7',pos =(rightLabWidth,Height+95))
        t26 = wxTextCtrl(self.panel3, -1, 'string', wxPoint(rightTxtWidth,Height+90),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH,name='C_TO_KM')
        l27 = wxStaticText(self.panel3, -1, 'label8',pos =(leftLabWidth,Height+155))
        t27 = wxTextCtrl(self.panel3, -1, 'string8',wxPoint(leftTxtWidth,Height+150),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH  ,name = 'RULE_FLAT')
        l28 = wxStaticText(self.panel3, -1, 'label9',pos =(rightLabWidth,Height+155))
        t28 = wxTextCtrl(self.panel3, -1, 'string9',wxPoint(rightTxtWidth,Height+150),size=(TxtSizeWidth,TxtSizeHeight),style=wxTE_READONLY|wxTE_RICH,name = 'C_REASON_FK')
        l31 = wxStaticText(self.panel3, -1, 'string10',pos =(leftLabWidth,Height+245))
        t31 = wxTextCtrl(self.panel3, -1, '', wxPoint(leftTxtWidth,Height+240),size=(320,60),style=wxTE_READONLY|wxTE_MULTILINE|wxTE_RICH,name='C_COMMENT')

        szPos =60 
        rightComboLabel = wxStaticText(self.panel7, -1, 'combo1',wxPoint(szPos,Height+5),wxSize(80,20))
        self.rightCombo = wxComboBox(self.panel7, -1, '',wxPoint(szPos+100,Height),wxSize(45,cbSizeHeight), style=wxCB_READONLY|wxCB_SORT,name = 'SZ_ID')
        self.chkbox1=wxCheckBox(self.panel7, -1, 'chk1', wxPoint(szPos,Height+50), style=wxNO_BORDER, name = 'SZ_VACANCES')
        self.chkbox2=wxCheckBox(self.panel7, -1, 'chk2', wxPoint(szPos,Height+80), style=wxNO_BORDER, name = 'SZ_ACTIVITY')
        self.chkbox3=wxCheckBox(self.panel7, -1, 'chk3', wxPoint(szPos,Height+110), style=wxNO_BORDER, name = 'SZ_WEATHER')
        self.chkbox4=wxCheckBox(self.panel7, -1, 'chk4', wxPoint(szPos,Height+140),style=wxNO_BORDER, name = 'SZ_EQUIPMENT')
        self.chkbox5=wxCheckBox(self.panel7, -1, 'chk5', wxPoint(szPos,Height+170), style=wxNO_BORDER, name = 'SZ_LANE_SWING')
        self.chkbox6=wxCheckBox(self.panel7, -1, 'chk6', wxPoint(szPos,Height+200), style=wxNO_BORDER, name = 'SZ_LEFT_BLOCK')
        self.chkbox7=wxCheckBox(self.panel7, -1, 'chk7', wxPoint(szPos,Height+230), style=wxNO_BORDER, name = 'SZ_RIGHT_BLOCK')
        l32 = wxStaticText(self.panel7, -1, 'stringx',pos =(szPos,Height+265))
        t32 = wxTextCtrl(self.panel7, -1, 'stringx', pos =(szPos+150,Height+260),size=(40,20),style=wxTE_RICH,name='SZ_HEAVY_VEHICLE_ROTATION')
        l321 = wxStaticText(self.panel7, -1, '%',pos =(szPos+195,Height+265))

        

        self.mainSizer = wxBoxSizer(wxHORIZONTAL)
        self.leftSizer = wxBoxSizer(wxVERTICAL)
        self.rightSizer = wxBoxSizer(wxVERTICAL)

        self.leftSizer.Add(self.panel2,1,wxEXPAND)
        self.leftSizer.Add(self.panel3,13,wxALIGN_CENTER_VERTICAL|wxEXPAND)
        self.leftSizer.Add(self.panel4,1,wxEXPAND)

        self.mainSizer.Add(self.leftSizer,1,wxEXPAND)
        self.mainSizer.Add(self.panel5,0,wxEXPAND)
        self.mainSizer.Add(self.rightSizer,1,wxEXPAND)

        self.rightSizer.Add(self.panel6,1,wxEXPAND)
        self.rightSizer.Add(self.panel7,13,wxALIGN_CENTER_VERTICAL|wxEXPAND)
        self.rightSizer.Add(self.panel8,1,wxEXPAND)

        self.SetAutoLayout(1)
        self.SetSizer(self.mainSizer)
        #~ self.Maximize(0)
        #~ self.Maximize(1)
        self.mainSizer.Fit(self)


    def OnTest2(self,event):
        self.menuBar.EnableTop(1,0)
        self.ReguestSend()
        self.panel1.Show(0)
        self.CharactInitData()

class MyApp(wxApp):
    def OnInit(self):
        frame = Main(NULL ,-1, 'problem')

if __name__ == '__main__':
    import sys
    app = wxPySimpleApp()
    frame = Main(NULL ,-1, 'problem','')
    frame.Maximize(1)
    frame.Show(True)
    frame.CenterOnParent(wxBOTH)
    app.MainLoop()
Zuletzt geändert von 2bock am Montag 29. September 2003, 13:55, insgesamt 1-mal geändert.
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

2bock hat geschrieben:Im Anhang der Beispielcode, der so herauskopiert werden kann und läuft.(müßt vielleicht Zeilen einrücken)
benutze die code-tags (bei dir fehlt das anfangs tag)

auf bald
oenone
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Hi oenone,

Code-tags? welche meinst Du
die Usr!....... python... die als aller erstes im Code stehen sollten? Oder meintest Du andere? :oops:

danke für Deine Antwort.
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Ausser diesm Tag fällt mir jetzt echt nix ein. Welche Meintest Du denn sonst noch? Denn durch diesen Tag hat sich nichts verändert.
:cry:
#! /usr/bin/python
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

diese hier [code][/code] fehlen in deinem Beitrag, weil der Quellcode ohne einrückungen unlesbar ist. Ich habs jetzt hineineditiert, aber achte später bitte mal darauf.
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Die Lösung liegt im FitSizer.

Da das Fenster maximiert war und brauchte ich nicht die Fit.. Methode, die die Größe des Fensters u.a. feststellt. Es reicht ein einfaches self.Layout() aus. Unten seht ihr nocheinmal den abgeänderten Code.

Bis dann 2bock :wink:


Code: Alles auswählen

...........
       self.rightSizer.Add(self.panel6,1,wxEXPAND)
        self.rightSizer.Add(self.panel7,13,wxALIGN_CENTER_VERTICAL|wxEXPAND)
        self.rightSizer.Add(self.panel8,1,wxEXPAND)

        self.SetAutoLayout(1)
        self.SetSizer(self.mainSizer)
        self.Layout()[
Antworten