Auf Controls anderer Klassen zugreifen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Korea-2003
User
Beiträge: 25
Registriert: Mittwoch 23. April 2008, 13:47

Dienstag 8. Juli 2008, 10:52

Hallo,

in meiner MainForm Klasse greife ich auf eine andere "unter"-Klasse zu welche, wiederum auf eine "unter"-Klasse zugreift auf der ein ListCtrl erstellt wird. Nun möchte ich aus meiner MainForm Klasse auf dieses ListCtrl zugreifen. Aber wie?
Hier mal mein code um die Programmstruktur zu verstehen.

Code: Alles auswählen

import wx

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 'Test', size=(570, 170), style=wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER)
        self.panel = wx.Panel(self, wx.ID_ANY, size=(570, 170))
        
        self.logbook = LogBook(self.panel, wx.ID_ANY, (5, 5), (550, 120))

        
class LogBook(wx.Notebook):
    def __init__(self, parent, id, pos, size):
        wx.Notebook.__init__(self, parent, id, pos, size)
        
        self.AddPage(LogBookPage1(self), "Log")
        
        
class LogBookPage1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        
        self.logList = wx.ListCtrl(self, -1, (0, 1), (542, 95), style=wx.LC_REPORT)
        self.logList.InsertColumn(0, "Time")
        self.logList.InsertColumn(1, "Log Text")
        
        
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()
MfG :)
ElSids
User
Beiträge: 16
Registriert: Montag 25. Juni 2007, 13:15
Wohnort: Corciano/Italien

Sonntag 20. Juli 2008, 18:16

Ich weiss nicht ob dies die beste Lösung ist, zumindest funktioniert sie.
Zur Verdeutlichung habe ich ein knappes Menü und eine StatusBar eingefügt

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import wx

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, u"Test", size=(570, 270), style=wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER)
        self.panel = wx.Panel(self, wx.ID_ANY, size=(570, 170))
        self.CreateMenuBar()
        self.CreateStatusBar()
        self.CenterOnScreen()
        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)

        self.Bind(wx.EVT_MENU, self.OnExit, id=101)
        self.Bind(wx.EVT_MENU, self.OnNewColumn, id=201)
       
        self.logbook = LogBook(self.panel, wx.ID_ANY, (5, 5), (550, 120))
        [b]a = self.logbook.GetChildren()[/b]
        for item in a:
            self.neueSpalte = item.logList
            # falls ein wx.TextCtrl self.meinTextCtrl existiert usw.
            #self.neuerText = item.meinTextCtrl

    def CreateMenuBar(self):
        menuBar = wx.MenuBar()
        menu1 = wx.Menu()
        menu1.Append(101, u"&Exit", u"Schließt das Programm")
        menuBar.Append(menu1, "&Datei")

        menu2 = wx.Menu()
        menu2.Append(201, u"Neue Spalte")
        menuBar.Append(menu2, u"&Neue Spalte")

        self.SetMenuBar(menuBar)

    def OnExit(self, evt):
        self.Close(True)

    def OnCloseWindow(self,evt):
        self.Destroy()
        
    def OnNewColumn(self, evt):
        self.neueSpalte.InsertColumn(2, u"Neue Spalte")
     self.SetStatusText(str(self.neueSpalte)+"-"+str(type(self.neueSpalte)))
        
class LogBook(wx.Notebook):
    def __init__(self, parent, id, pos, size):
        wx.Notebook.__init__(self, parent, id, pos, size)
       
        self.AddPage(LogBookPage1(self), u"Log")

class LogBookPage1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

class LogBookPage1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
       
        self.logList = wx.ListCtrl(self, -1, (0, 1), (542, 95), style=wx.LC_REPORT)
        self.logList.InsertColumn(0, u"Time")
        self.logList.InsertColumn(1, u"Log Text") 
       
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()
El Sids
Antworten