wie bestimme ich in einem Frame, dass aus mehreren Notebook-Panels (mit TextCtrl) besteht das aktive Panel um es abzuspeichern?
Code: Alles auswählen
import wx
import os
wx.SetDefaultPyEncoding("iso-8859-1")
ID_NEW = 100
ID_OPEN = 101
ID_SAVE = 102
ID_EXIT = 104
class EditPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.filename = ''
self.dirname = ''
vbox = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(vbox)
self.text = wx.TextCtrl(self, 1, "", style=wx.TE_MULTILINE)
vbox.Add(self.text, proportion = 1, flag = wx.ALL | wx.EXPAND, border=1)
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Simple Notebook Example")
self.CreateStatusBar()
filemenu = wx.Menu()
filemenu.Append(ID_NEW, "&New", "Create a new file")
filemenu.Append(ID_OPEN, "&Open", "Open a file")
filemenu.Append(ID_SAVE, "&Save", "Save the active file")
filemenu.Append(ID_EXIT, "E&xit", "Terminate the Program")
wx.EVT_MENU(self, ID_NEW, self.OnNew)
wx.EVT_MENU(self, ID_OPEN, self.OnOpen)
wx.EVT_MENU(self, ID_SAVE, self.OnSave)
wx.EVT_MENU(self, ID_EXIT, self.OnExit)
menubar = wx.MenuBar()
menubar.Append(filemenu, "&File")
self.SetMenuBar(menubar)
self.ePanel = []
editMainPanel = wx.Panel(self)
self.createEditorNotebook(editMainPanel)
###########################################################################
# HaupteditorPanel ...
def createEditorNotebook(self, parent):
vbox = wx.BoxSizer(wx.VERTICAL)
parent.SetSizer(vbox)
self.nb = wx.Notebook(parent, style = wx.NB_BOTTOM)
vbox.Add(self.nb, 1, wx.ALL | wx.EXPAND, border = 5)
###########################################################################
# Neues File erzeugen
def OnNew(self, event):
n = len(self.ePanel)
self.ePanel.append(EditPanel(self.nb))
self.filename = "default.txt"
self.nb.AddPage(self.ePanel[n], self.filename)
###########################################################################
# Programm beenden
def OnExit(self, event):
self.Close(True)
###########################################################################
# File oeffnen
def OnOpen(self, event):
self.dirname = ""
dlg = wx.FileDialog(self, "Open", self.dirname, "", "*.*", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetFilename()
dirname = dlg.GetDirectory()
f = open(os.path.join(dirname,filename),'r')
n = len(self.ePanel)
self.ePanel.append(EditPanel(self.nb))
self.nb.AddPage(self.ePanel[n], filename)
self.ePanel[n].text.SetValue(f.read())
self.ePanel[n].filename = filename
self.ePanel[n].dirname = dirname
f.close()
dlg.Destroy
###########################################################################
# Datei aus aktivem Panel speichern
def OnSave(self, event):
# print self.ePanel[0].text.GetValue()
# activePanel = event.GetActiveObject() # Enthaelt leider 'nur' das MainObject "MainFrame"
"""if activePanel.dirname == "":
self.dirname = ""
dlg = wx.FileDialog(self, "Save", self.dirname, "", "*.*", wx.SAVE)
if dlg.ShowModal() == wx.ID_OK:
self.filename = dlg.GetFilename()
self.dirname = dlg.GetDirectory()
f = open(os.path.join(self.dirname, self.filename), 'w')
f.write(activePanel.text.GetValue())
f.close()
dlg.Destroy
else:
f = open(os.path.join(activePanel.dirname, activePanel.filename), 'w')
print activePanel.text
f.write(activePanel.text.GetValue())
f.close()"""
if __name__ == "__main__":
app = wx.App()
f = MainFrame()
f.Center()
f.Show()
app.MainLoop()
Sorry, ich habe es bereits auf das wesentlichste gekürtzt.
Grüße, Calo