Seite 1 von 1

Auf Controls anderer Klassen zugreifen

Verfasst: Dienstag 8. Juli 2008, 10:52
von Korea-2003
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 :)

Verfasst: Sonntag 20. Juli 2008, 18:16
von ElSids
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