Ich habe jetzt einmal testweise einen HTML Editor mit wxPython geschrieben und er läuft auf meinem Laptop (WinXP) auch sehr gut.
Jetzt habe ich das Ganze auf dem PC (Windows2000) getestet (Beide Python23) und dort startet das Programm nicht.
Ich habe dann lange herungerätselt und bin dann draufgekommen, dass die Umlaute schuld sind.
Warum weiß ich nicht.
Hat jemand eine Erlkärung?
Code: Alles auswählen
# -*- coding: cp1252 -*-
# ---------------------------------------------------------------------------- #
# WX DemoEditor #
# (c) Copyright 2004 by Active-4 Software Developement #
# Code by Armin Ronacher <armin.ronacher@active-4.com> #
# ---------------------------------------------------------------------------- #
from wxPython.wx import *
from wxPython.iewin import *
import os
import sys
class mainframe(wxFrame):
def __init__(self, *args, **kwds):
"""
Erstellt die Komponenten, und ruft die Layout Funktionen auf
"""
#Fenster erstellen
kwds["style"] = wxCAPTION|wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxSYSTEM_MENU|wxSIMPLE_BORDER|wxRESIZE_BORDER
wxFrame.__init__(self, *args, **kwds)
#Notebook Komponente erstellen
self.notebook = wxNotebook(self, 20, style=0)
self.notebook_source = wxPanel(self.notebook, -1)
self.notebook_html = wxPanel(self.notebook, -1)
#Editorfeld
self.editor = wxTextCtrl(self.notebook_source, -1, "", style=wxTE_MULTILINE | wxHSCROLL)
#IE Komponente
self.browser = wxIEHtmlWin(self.notebook_html, 20, style = wxNO_FULL_REPAINT_ON_RESIZE)
#Menüleiste
self.mframe_menubar = wxMenuBar()
self.SetMenuBar(self.mframe_menubar)
tmpmenu = wxMenu()
#Datei Menü
tmpmenu.Append(110, "Neu", "", wxITEM_NORMAL)
tmpmenu.Append(120, "Öffnen", "", wxITEM_NORMAL)
tmpmenu.Append(130, "Speichern", "", wxITEM_NORMAL)
tmpmenu.Append(140, "Speichern unter", "", wxITEM_NORMAL)
tmpmenu.AppendSeparator()
tmpmenu.Append(150, "Beenden", "", wxITEM_NORMAL)
self.mframe_menubar.Append(tmpmenu, "Datei")
#Bearbeiten Menü
tmpmenu = wxMenu()
tmpmenu.Append(210, "Kopieren", "", wxITEM_NORMAL)
tmpmenu.Append(220, "Ausschneiden", "", wxITEM_NORMAL)
tmpmenu.Append(230, "Einfügen", "", wxITEM_NORMAL)
self.mframe_menubar.Append(tmpmenu, "Bearbeiten")
#Hilfe Menü
tmpmenu = wxMenu()
tmpmenu.Append(310, "Über", "", wxITEM_NORMAL)
self.mframe_menubar.Append(tmpmenu, "Hilfe")
#Layout Funktionen aufrufen
self.__set_properties()
self.__do_layout()
self.__register_events()
#Neue Datei erstellen
self._newFile(1)
self._setTitle()
def __set_properties(self):
"""
Setzt die Eigenschaften für die Komponenten
"""
self.SetSize((600, 480))
self.SetBackgroundColour(wxColour(250, 250, 250))
self.SetFont(wxFont(10, wxMODERN, wxNORMAL, wxNORMAL, 0, "Tahoma"))
self.editor.SetFont(wxFont(10, wxMODERN, wxNORMAL, wxNORMAL, 0, "Courier New"))
def __do_layout(self):
"""
Richtet die Komponenten in den Sizern aus
"""
#Sizer erstellen
s1 = wxBoxSizer(wxVERTICAL)
s2 = wxGridSizer(1, 1, 0, 0)
s3 = wxGridSizer(1, 1, 0, 0)
#Komponenten montieren
s3.Add(self.editor, 0, wxEXPAND, 0)
s2.Add(self.browser, 0, wxEXPAND, 0)
self.notebook_source.SetAutoLayout(1)
self.notebook_source.SetSizer(s3)
s3.Fit(self.notebook_source)
s3.SetSizeHints(self.notebook_source)
self.notebook_html.SetAutoLayout(1)
self.notebook_html.SetSizer(s2)
s2.Fit(self.notebook_html)
s2.SetSizeHints(self.notebook_html)
self.notebook.AddPage(self.notebook_source, "Quellcode")
self.notebook.AddPage(self.notebook_html, "HTML Ansicht")
s1.Add(wxNotebookSizer(self.notebook), 1, wxEXPAND, 0)
self.SetAutoLayout(1)
self.SetSizer(s1)
self.Layout()
def __register_events(self):
"""
Weist den einzelnen Komponenten Events zu
"""
#Datei Menü
EVT_MENU(self, 110, self.__OnMenu)
EVT_MENU(self, 120, self.__OnMenu)
EVT_MENU(self, 130, self.__OnMenu)
EVT_MENU(self, 140, self.__OnMenu)
EVT_MENU(self, 150, self.__OnMenu)
#Bearbeiten Menü
EVT_MENU(self, 210, self.__OnMenu)
EVT_MENU(self, 220, self.__OnMenu)
EVT_MENU(self, 230, self.__OnMenu)
#Hilfe Menu
EVT_MENU(self, 310, self.__OnMenu)
#Notebook
EVT_NOTEBOOK_PAGE_CHANGED(self, 20, self.__OnBrowser)
#Editor
EVT_TEXT(self, 10, self.__OnEditor)
def __OnBrowser(self, event):
if (self.notebook.GetSelection() == 1):
self.browser.Navigate(self.filename)
def __OnEditor(self, event):
self.changed = 1
def __OnMenu(self, event):
id = event.GetId();
#Datei->Neu
if (id == 110):
self._newFile()
#Datei->Öffnen
if (id == 120):
self._openFile()
#Datei->Speichern
if (id == 130):
self._saveFile()
#Datei->Speichern unter
if (id == 140):
self._saveFile(1)
#Datei->Beenden
if (id == 150):
if (self.changed):
dlg = wxMessageDialog(self, "Möchten sie Änderungen speichern?",
"Demoeditor", wxYES_NO| wxCANCEL | wxICON_INFORMATION)
ret = dlg.ShowModal()
if (ret == wxID_YES):
self._saveFile()
if (ret == wxID_NO):
self.Close()
dlg.Destroy()
else:
self.Close()
#Bearbeiten->Kopieren
if (id == 210):
self.editor.Copy()
#Bearbeiten->Ausschneiden
if (id == 220):
self.editor.Cut()
#Bearbeiten->Einfügen
if (id == 230):
self.editor.Paste()
#Hilfe->Über
if (id == 310):
copytext = "Ein einfacher HTML Editor als wxPython Testprojekt\r\n" \
"(c) Copyright 2004 by Active-4 Software Developement\r\n" \
"Cody by Armin Ronacher\r\n\r\n";
dlg = wxMessageDialog(self, copytext,
"Demoeditor", wxOK | wxICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
# ------------------------------------------------------------------------ #
def _newFile(self, overwrite=0):
if (overwrite):
self._clear()
else:
if (not self.saved):
dlg = wxMessageDialog(self, "Möchten sie Änderungen speichern?",
"Demoeditor", wxYES_NO| wxCANCEL | wxICON_INFORMATION)
ret = dlg.ShowModal()
if (ret == wxID_YES):
self._saveFile()
self._clear()
if (ret == wxID_NO):
self._clear()
dlg.Destroy()
def _clear(self):
self.changed = 0
self.saved = 0
self.filename = "Unbenannt"
save = 0
self.editor.SetValue("")
def _saveFile(self, saveas = 0):
if (not self.saved or saveas):
wildcard = "HTML Datei (*.html, *.htm)|*.html;*.htm|"\
"Alle Dateien (*.*)|*.*"
dlg = wxFileDialog(self, "Datei speichern unter...", os.getcwd(),
"", wildcard, wxSAVE )
ret = dlg.ShowModal()
if (ret == wxID_OK):
self.filename = dlg.GetPath()
cont = self.editor.GetValue()
file(self.filename, "w").write(cont)
self.changed = 0
self.saved = 1
self._setTitle()
dlg.Destroy()
def _openFile(self):
save = 1
if (not self.saved):
save = 0
dlg = wxMessageDialog(self, "Möchten sie Änderungen speichern?",
"Demoeditor", wxYES_NO| wxCANCEL | wxICON_INFORMATION)
ret = dlg.ShowModal()
if (ret == wxID_YES):
save = 1
if (ret == wxID_NO):
save = 1
dlg.Destroy()
if (save):
wildcard = "HTML Datei (*.html, *.htm)|*.html;*.htm|"\
"Alle Dateien (*.*)|*.*"
dlg = wxFileDialog(self, "Datei öffnen...", os.getcwd(),
"", wildcard, wxOPEN )
ret = dlg.ShowModal()
if (ret == wxID_OK):
self.filename = dlg.GetPath()
cont = file(self.filename, "r").read()
self.editor.SetValue(cont)
self.changed = 0
self.saved = 1
self._setTitle()
dlg.Destroy()
def _setTitle(self):
self.SetTitle("Demoeditor - "+self.filename);
class app(wxApp):
def OnInit(self):
wxInitAllImageHandlers()
mframe = mainframe(None, -1, "")
self.SetTopWindow(mframe)
mframe.Show(1)
return 1
if __name__ == "__main__":
application = app(0)
application.MainLoop()