So, seit meinen letzten Fragan habe ich tatsächlich mein erstes Phyton Projekt fertiggestellt. und es funktioniert sogar

Allerdings habe ich noch folgendes kleines Problem dass ich gerne lösen würde.
Ich kopiere eine komplette Ordnerstruktur mit copytree das über einen Start Button gestartet wird. Während diesem Kopiervorgang möchte ich gerne eine Meldung erhalten dass irgendwas am tun ist.
Dass muss nicht unbedingt ein ProgressDialog sein, denn dieser scheint mir sehr kompliziert und aufwendig da dieser ja in einem zusätzlichen Thread ablaufen muss damit soetwas wie ein paraleller Ablauf ensteht.Am liebsten hätte ich z.b ein MessageDialog benutzt. Nur hab ich da das Problem dass ich zuerst mit Ok bestätigen muss bevor der Code dan weiter geht. Oder kann man den MessageDialog auch ohne Ok Button erzeugen damit die Software weiterläuft und sobald das kopieren fertig ist wird der MessageDialog mit Close() oder so wieder geschlossen?
Als das auch nicht funktioniert hat hab ich mir gedacht ich erstelle einfach eine neue Klasse in der ich wieder ein Frame erstelle und einen StaticText dazu mit meiner Nachricht die ich ausgeben möchte. Diese Klasse ruf ich dann auf wenn der Start Button gedrückt wird. Dies funktioniert soweit nur wird mir der Text nicht angezeigt sondern nur ein Balken. Wenn ich das Close() auskomentiere sieht man dass zuerst das Frame angezeigt wird dann die Daten kopiert und erst dann der Text im Frame angezeigt..mhm...ich bin momentan ratlos...
Hier noch mein Code damit ihr euch auch ein Bild machen könnt.
Code: Alles auswählen
import wx
import os
import shutil
import sys
class FrameEingabemaske(wx.Frame):
#Frame mit allen Elementen erstellen (GUI)
def __init__(
self, parent, ID, title, pos=wx.DefaultPosition,
size=(600,400), style=wx.DEFAULT_FRAME_STYLE,
):
wx.Frame.__init__(self, parent, ID, title, pos, size, style)
panel = wx.Panel(self, -1)
#Titel dem Frame vergeben
self.SetTitle("SciptA")
#Cancel Button initialisiern
button_cancel = wx.Button(parent=panel,
id=1003,
label="Cancel",
pos=(70,270),
size=(100,50))
button_cancel.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
#Start Button initialisiern
button_start = wx.Button(parent=panel,
id=1004,
label="Start",
pos=(380,270),
size=(150,50))
button_start.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
#Events den Buttons und Checkboxes zuweisen
self.Bind(wx.EVT_BUTTON, self.Exit, button_cancel)
self.Bind(wx.EVT_BUTTON, self.Start, button_start)
#***************************************************************************************
#Bei Exit wird das Fenster geschlossen wenn der Button Cancel gedrueckt wird
def Exit(self, event):
self.Close(True)
event.Skip()
#***************************************************************************************
def Start(self, event):
# self.Message("Test") # Versuch mit Message Fenster
Frame_2 = InfoFenster(None, -1, "") #Versuch mit neuem Frame erstellen
Frame_2.Show()
#Hier wird Kopiert
shutil.copytree("C:\\temp\\TestQuelle",
"C:\\temp\\TestZiel",
symlinks = False)
Frame_2.Close()
event.Skip()
#***************************************************************************************
#Oeffnet ein Fenster mit dem uebergebenen Text
def Message(self,text):
Nachricht = wx.MessageDialog(parent= self,
message=text,
caption="Meldung",
style=wx.OK)
Nachricht.ShowModal()
#**********************************************************************************************
#Oeffnet ein Fenster mit dem uebergebenen Text
class InfoFenster(wx.Frame):
def __init__(
self, parent, ID, title, pos=wx.DefaultPosition,
size=(600,600), style=wx.DEFAULT_FRAME_STYLE,
):
wx.Frame.__init__(self, parent, ID, title, pos, size, style)
panel1 = wx.Panel(self, -1)
#Titel dem Frame vergeben
self.SetTitle("INFO")
#Statischer Text Release initialisiern
Info = wx.StaticText(parent=panel1,
id=1000,
label="Test",
pos=(20,40),
size=(100,25),
style=wx.ALIGN_RIGHT)
Info.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = FrameEingabemaske(None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()
Besten Dank für eure Hilfe im vorein..