Frame - Split, nur wie?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Gast

hi,
denke mal da thema beschreibt mein problem - fang grad an bisschen wxpython zu testen.
und google + diverse foren konnten nicht wirklich helfen.
so habe leider nur nen java ansatz davon hab ich bischen ahnung ...
und zwar muss es doch was simples geben wie ich nen frame splitte!?
in java wäre es borderlayout "west" und z.b. borderlayout "east" um ein frame 50/50 aufzuteilen.

für jegliche hilfe wäre ich sehr dankbar

mfg
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Das machst du am besten mit Sizern. Schau mal im wxWiki nach. Unter "Getting Started" im Bereich "7.1.1 Laying out Visual Elements" gibt es ein Tutorial.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi

Für diesen Zweck gibt es Sizer. Ich schlage vor, Du schaust Dir einmal die Demo an - dann bist Du schlauer.

Gruß,
Christian
Gast

ok danke,
dann mach ich mich mal da dran ....
Gast

tja hab da wohl was falsch verstanden ...

so vorher ohne sizer hat der texteditor gefuntzt aber jetzt nur tracebacks mit fehlern
kann mir einer auf die sprünge heelfen???

Code: Alles auswählen

from wxPython.wx import *

ID_OPEN_DAT = 100
ID_SAVE_DAT = 101
ID_INFO = 102
ID_EXIT  = 103


#Mainframe
class MyFrame(wxFrame):  
    def __init__(self, parent, ID, title):
        wxFrame.__init__(self, parent, ID, title,
                         wxDefaultPosition, wxSize(500, 400))
        self.CreateStatusBar()
        self.SetStatusText("Statusanzeige")
        
        self.editor = wxTextCtrl(self, -1, "", wxTE_MULTILINE);
        self.panel = wxPanel(self, -1, "")
        
        self.sizer=wxBoxSizer(wxVERTICAL)
        self.sizer.Add(self.editor,0,wxEXPAND)
        self.sizer.Add(self.panel,0,wxEXPAND)
        
        menu = wxMenu()
        menu.Append(ID_OPEN_DAT, "Datei öffnen", "Öffnet angegebene Datei")
        menu.Append(ID_SAVE_DAT, "Datei speichern", "Speichert geöffnete Datei")
        menu.Append(ID_INFO, "Info", "Programm - Infos")  
        menu.AppendSeparator()
        menu.Append(ID_EXIT, "Beenden", "Beendet die Anwendung")

        menuBar = wxMenuBar()
        menuBar.Append(menu, "Menü");

        self.SetMenuBar(menuBar)
        
        #Layout sizers
        self.SetSizer(self.sizer)
        self.SetAutoLayout(1)
        self.sizer.Fit(self)
        
   
class MyApp(wxApp):
    def OnInit(self):
        frame = MyFrame(Null, -1, "wxPython - test")
        frame.Show(true)
        self.SetTopWindow(frame)
        return true

app = MyApp(0)
app.MainLoop()
nun noch die fehler ausgabe:
Traceback (most recent call last):
File "test.py", line 88, in ?
app = MyApp(0)
File "/usr/lib/python2.3/site-packages/wx-2.6-gtk2-ansi/wx/_core.py", line 7473, in __init__
self._BootstrapApp()
File "/usr/lib/python2.3/site-packages/wx-2.6-gtk2-ansi/wx/_core.py", line 7125, in _BootstrapApp
return _core_.PyApp__BootstrapApp(*args, **kwargs)
File "test.py", line 83, in OnInit
frame = MyFrame(Null, -1, "wxPython - test")
NameError: global name 'Null' is not defined


sry für den riesen post aber weiss nich wie sonst ...

mfg
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Is eh kein so Riesenpost :wink:

Zuerst: welche wxPython Version hast du?
Seit 2.5 sollte man nur mehr den "neuen" Namespace verwenden.
"Null" gibt es nicht mehr; stattdessen None.

Habe dein Programm leicht abgeändert:

Code: Alles auswählen

import wx
# -*- encoding: latin-1 -*- 
ID_OPEN_DAT = 100
ID_SAVE_DAT = 101
ID_INFO = 102
ID_EXIT  = 103


#Mainframe
class MyFrame(wx.Frame): 
    def __init__(self, parent, ID, title):
        wx.Frame.__init__(self, parent, ID, title,
                         wx.DefaultPosition, wx.Size(500, 400))
        self.CreateStatusBar()
        self.SetStatusText("Statusanzeige")
       
        self.editor = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE);
        self.panel = wx.Panel(self, -1)
       
        self.sizer=wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.editor,0,wx.EXPAND)
        self.sizer.Add(self.panel,0,wx.EXPAND)
       
        menu = wx.Menu()
        menu.Append(ID_OPEN_DAT, "Datei öffnen", "Öffnet angegebene Datei")
        menu.Append(ID_SAVE_DAT, "Datei speichern", "Speichert geöffnete Datei")
        menu.Append(ID_INFO, "Info", "Programm - Infos") 
        menu.AppendSeparator()
        menu.Append(ID_EXIT, "Beenden", "Beendet die Anwendung")

        menuBar = wx.MenuBar()
        menuBar.Append(menu, "Menü");

        self.SetMenuBar(menuBar)
       
        #Layout sizers
        self.SetSizer(self.sizer)
        self.SetAutoLayout(1)
        self.sizer.Fit(self)
       
   
class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, "wxPython - test")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
app.MainLoop() 
Gast

hi, erstmal mal many thx too u

so da NULL bei mir gefuntzt hat und latin 1 encoding nicht unterstützt wird bin ich wahrscheinlich nicht uptodate. leider liegt python aufm server und ich hab keine su rechte um die version zu checken ... also werd ich mich mal an einen der admins wenden und ggf. wxpy updaten ...

trotzdem vielen dank

p.s.: mein code war auch irgendwie immer ohne wx.blabla (wxblabla) ... ist schon nervig sich 3 tage mit zeug rumzuschlagen ohne wirklich ergebnisse zu erzielen, vllt bleib ich doch bei java auch wenn das hier in der firma keiner hernimmt
Antworten