okay, ich muss mich entschuldigen, ich hatte mein kleines testprog für euch nich noch einmal ausführlich getestet ... ich hatte gedacht, der Fehler liegt dort auch, wie im folgenden, an der Anzeige des Dialogs ... aber leider scheint ein wx.Dialog Unterschiede zum wx.MessageDialog in dieser Hinsicht zu haben. Hier mal ein wx.Dialog, so ähnlich wie ich ihn auch in meinem Programm benutze in einem thread:
Code: Alles auswählen
# -*- coding: cp1252 -*-
import wx,time,os,sys
from thread import start_new
class mydialog_save(wx.Dialog):
def __init__(self,parent,name,txt):
self.txt=txt
self.path,self.name=os.path.split(name)
pre = wx.PreDialog()
pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
pre.Create(parent,-1,"Speichern ... %s"%name,wx.DefaultPosition,(700,700))
self.PostCreate(pre)
self.outp = wx.TextCtrl(self, -1,txt,(10,10),size=(674, 620), style=wx.TE_MULTILINE|wx.TE_READONLY)
self.outp.SetBackgroundColour(wx.NamedColor('WHITE'))
btn=wx.Button(self,-1,"Speichern",(300,640))
btn.SetDefault()
self.Bind(wx.EVT_BUTTON,self.save_as,btn)
btn = wx.Button(self, wx.ID_OK,"Fertig",(450,640))
def save_as(self,event=None):
if self.path and not os.path.isdir(self.path):
os.makedirs(self.path)
while True:
dlg = wx.FileDialog(
self, defaultDir=self.path,
defaultFile=self.name, wildcard=wildcard, style=wx.SAVE | wx.CHANGE_DIR
)
if dlg.ShowModal() == wx.ID_OK:
path=dlg.GetPaths()[0]
if os.path.isfile(path):
dlg = wx.MessageDialog(self,'Diese Datei existiert schon. Wollen SIe die Daten anfügen?',
'ERROR', wx.YES_NO|wx.NO_DEFAULT)
ret=dlg.ShowModal()
dlg.Destroy()
if ret==wx.ID_YES:
try:
f=open(path,'a')
except:
dlg.Destroy()
dlg = wx.MessageDialog(self,'Datei kann nicht geschrieben werden',
'ERROR', wx.OK)
dlg.ShowModal()
dlg.Destroy()
continue
else:
continue
else:
try:
f=open(path,'w')
except:
dlg.Destroy()
dlg = wx.MessageDialog(self,'Datei kann nicht geschrieben werden',
'ERROR', wx.OK)
dlg.ShowModal()
dlg.Destroy()
continue
f.write(self.outp.GetValue())
f.close()
break
pass
def arbeite_ganz_doll(parent):
busy = wx.BusyInfo("Ich arbeite hier gerade ganz doll im Hintergrund...")
time.sleep(2)
del busy
dlg=mydialog_save(parent, os.path.join(os.path.split(sys.argv[0])[0],'Testordner','Testdatei.txt'),
'hier ist halt der Text.')
dlg.CenterOnScreen()
print 'bis hier gehts'
dlg.ShowModal()
print 'hier schon nicht mehr'
dlg.Destroy()
class app(wx.App):
def OnInit(self):
frame = myframe(None)
self.SetTopWindow(frame)
frame.CenterOnScreen()
frame.Show(True)
return True
class myframe(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent,-1,'Hallo Welt',size=(100,100))
btn=wx.Button(self,-1,'Hier klicken',(10,10),(80,80))
self.Bind(wx.EVT_BUTTON,lambda event: start_new(arbeite_ganz_doll,(self,)),btn)
x=app(redirect=False)
x.MainLoop()