Das hört sich gut an. Ich habe mittlerweile die zwei Programmteile in einem Frame zusammengefasst und die jeweils nicht benötigten Schaltflächen werden ausgegraut (s.u.). Wie müßte ich das Programm geändert werden um die Tabs einzufügen?
Code: Alles auswählen
#---------------------------------------------------------------------------
#IMPORT ANDERER PYTHON MODULE
#---------------------------------------------------------------------------
## import all of the wxPython GUI package
from wxPython.wx import *
#from wxPython.lib.intctrl import *
#from wxPython.lib.imagebrowser import *
#from wxPython.lib.filebrowsebutton import FileBrowseButton, FileBrowseButtonWithHistory,DirBrowseButton
#import time
#import urllib
import os
import wx
import exceptions
from sio import *
from MySerial_v02 import *
#---------------------------------------------------------------------------
#WILDCARDs
#---------------------------------------------------------------------------
wildcard1 = "CSV-Textdatei(*.csv)|*.csv|" \
"TXT-Datei (*.txt)|*.txt|" \
"All files (*.*)|*.*"
wildcard2 = "TXT-Datei (*.txt)|*.txt|" \
"CSV-Textdatei(*.csv)|*.csv|" \
"All files (*.*)|*.*"
#---------------------------------------------------------------------------
#KLASSE KombiPanel
#---------------------------------------------------------------------------
## Hier wird zuerst ein Fenster geöffnet mit den nötigen Komponenentenen
class KombiPanel(wxFrame):
def __init__(self, parent, id, title):
#-------------
#DEFAULT INITs
self.port= 1
self.bus= 1
#--------------------------------------
#FRAME ZUR SCHNITTSTELLEN KONFIGURATION
dlg = wxDialog(NULL,-1,"Schnittstellenkonfiguration",wxDefaultPosition,wxSize(200,150))
dlg.CenterOnScreen()
#----------------------
#ABFRAGE Com1 oder Com2
EVT_RADIOBOX (dlg,444, self.port_aenderung )
self.radiobox_port= wxRadioBox(dlg,444,"Schnittstelle zur Hardware?",wxPoint(20,10),wxDefaultSize,["COM 1","COM 2"],2,wxRA_SPECIFY_ROWS)
line = wxStaticLine(dlg,-1,wxPoint(7,200),wxSize(280,-1),wxLI_HORIZONTAL)
button_ok=wxButton(dlg,wxID_OK," OK ",wxPoint(50,90),wxSize(100,25))
dlg.ShowModal()
dlg.Destroy() #Frame zur Schnittstellenkonfiguration beenden
self.path = [] #Pfad Variable
self.string= ""
self.SendDataAvailable_Fl= 0
#---------------------------------------------------
#UEBERPRUEFEN OB ANGEGEBENE SCHNITTSTELLE VERFUEGBAR
try:
self.communication = Communication(self.port)
except:
self.communication = NULL
sys.exit()
#---------------------------------------------------
#HAUPT FRAME ERSTELLEN
wxFrame.__init__(self, parent, id, title,wxPoint(200, 300), wxSize(520, 285))
panel = wxPanel(self, -1)
#---------------------------------------------------
#BUTTONS DEFINIEREN u. POSITIONIEREN (MAIN FRAME)
self.FOpenButton = wxButton(panel, 100, "Datei öffnen")
self.FOpenButton.SetPosition(wxPoint(10, 15))
self.FOpenButton.SetSize(wxSize(95,30))
self.SendButton=wxButton(panel,200,"Datei senden")
self.SendButton.SetPosition(wxPoint(10,55))
self.SendButton.SetSize(wxSize(95,30))
self.SendButton.Disable()
self.ReceiveButton = wxButton(panel, 150, "Daten empfangen")
self.ReceiveButton.SetPosition(wxPoint(10, 115))
self.ReceiveButton.SetSize(wxSize(95,30))
self.SaveButton=wxButton(panel,250,"Datei speichern")
self.SaveButton.SetPosition(wxPoint(10,155))
self.SaveButton.SetSize(wxSize(95,30))
self.SaveButton.Disable()
BeendenButton=wxButton(panel,350,"Beenden")
BeendenButton.SetPosition(wxPoint(410,220))
BeendenButton.SetSize(wxSize(95,30))
#---------------------------------------------------
#EVENT ZUORDNUNG FUER BUTTONS
EVT_BUTTON(self,100, self.onFOpen) #FileOpen
EVT_BUTTON(self,200, self.onDSend) #DataSend
EVT_BUTTON(self,150, self.onReceiveData) #Daten empfangen
EVT_BUTTON(self,250, self.onSaveData) #Daten speichern
EVT_BUTTON(self,350, self.__onExit) #Beenden
EVT_CLOSE(self, self.__onExit) #Frame beenden
#---------------------------------------------------
#DEFINITION TEXTFELD
cb1 = wxTextCtrl(panel, -1,"", wxDLG_PNT(panel, wxPoint(80,37)), wxDLG_SZE(panel, wxSize(257,-1)))
#EVT_TEXT(panel, cb1.GetId(), self.onFOpen) #Dieses Event bezieht sich auf das Textfeld
self.cb1 = cb1
#---------------------------------------------------
#FNKTIONEN
def onFOpen(self, event):
#Dateiauswahl Dialog
dlg = wxFileDialog(self, "Datei öffnen...", os.getcwd(), "", wildcard1,wxOPEN
| wxMULTIPLE
| wxCHANGE_DIR
)
if dlg.ShowModal() == wxID_OK:
self.path = dlg.GetPaths()
#self.cb1.WriteText(self.path[0])
self.cb1.SetValue(self.path[0])
else:
self.cb1.SetValue("")
self.path=[]
self.SendButton.Disable() #Schaltflaeche disabled falls leerer Pfad
#return self.path
dlg.Destroy() #Datei Auswahldialog beenden
if self.path != []: #SendButton nur 'clickable' falls Pfad nicht leer
self.SendButton.Enable()
self.SendDataAvailable_Fl= 1
def onDSend(self,event):
self.SendButton.Disable()
self.FOpenButton.Disable()
self.ReceiveButton.Disable()
self.communication.send_file ( self.path[0])
dlg = wxDialog(NULL,-1,"Meldung!",wxDefaultPosition,wxSize(170,95))
text = wxStaticText(dlg,-1,"Übertragung abgeschlossen!",wxPoint(15,10),wxDefaultSize)
dlg.CenterOnScreen()
button_ok=wxButton(dlg,wxID_OK," OK ",wxPoint(65,40),wxSize(38,25))
dlg.ShowModal()
self.SendButton.Enable()
self.FOpenButton.Enable()
self.ReceiveButton.Enable()
dlg.Destroy()
def onSaveData(self, event):
#Dateiauswahl Dialog
dlg = wxFileDialog(self, "Datei speichern...", os.getcwd(), "", wildcard2, wxSAVE
| wxMULTIPLE
| wxCHANGE_DIR
)
if dlg.ShowModal() == wxID_OK:
path = dlg.GetPath()
#data= "Testdaten"
fp = file(path, 'w') # Create a new file
fp.write(self.string)
fp.close()
dlg.Destroy() #Datei Auswahldialog beenden
def onReceiveData(self, event):
self.string="" #String loeschen
self.SaveButton.Disable() #SaveButton disablen
self.SendButton.Disable()
self.FOpenButton.Disable()
self.ReceiveButton.Disable() #ReceiveButton disablen
NoDataRecv_Fl= 0
try:
self.string= self.communication.receive_data() #Daten empfangen
except:
dlg = wxDialog(NULL,-1,"Meldung!",wxDefaultPosition,wxSize(200,95))
text = wxStaticText(dlg,-1,"Timeout erreicht!",wxPoint(55,10),wxDefaultSize)
dlg.CenterOnScreen()
button_ok=wxButton(dlg,wxID_OK," OK ",wxPoint(75,35),wxSize(50,25))
dlg.ShowModal()
dlg.Destroy()
NoDataRecv_Fl= 1
#sys.exit()
#self.string= self.communication.receive_data() #Daten empfangen
#print self.string[0:]
self.ReceiveButton.Enable() #ReceiveButton enablen
self.FOpenButton.Enable()
if self.SendDataAvailable_Fl == 1:
self.SendButton.Enable()
if self.string != "": #SaveButton nur 'clickable' falls string nicht leer
dlg= wxDialog(NULL,-1,"Meldung!",wxDefaultPosition,wxSize(170,95))
text= wxStaticText(dlg,-1,"Empfang abgeschlossen!",wxPoint(23,10),wxDefaultSize)
dlg.CenterOnScreen()
self.SaveButton.Enable()
button_ok= wxButton(dlg,wxID_OK," OK ",wxPoint(65,40),wxSize(38,25))
dlg.ShowModal()
elif ((self.string == "") & (NoDataRecv_Fl == 0)):
dlg= wxDialog(NULL,-1,"Meldung!",wxDefaultPosition,wxSize(170,95))
text= wxStaticText(dlg,-1,"Keine Daten empfangen",wxPoint(15,10),wxDefaultSize)
dlg.CenterOnScreen()
self.SaveButton.Enable()
button_ok= wxButton(dlg,wxID_OK," OK ",wxPoint(65,40),wxSize(38,25))
dlg.ShowModal()
dlg.Destroy()
def __onExit(self, event):
self.Destroy()
def port_aenderung(self,event):
self.port=self.radiobox_port.FindString(self.radiobox_port.GetStringSelection())+1
#-----------------------------------------------------------------------
# Every wxWindows application must have a class derived from wxApp
#---------------------------------------------------------------------------
#KLASSE MyApp
#---------------------------------------------------------------------------
class MyApp(wxApp):
# wxWindows calls this method to initialize the application
def OnInit(self):
# Create an instance of our customized Frame class
frame = KombiPanel(NULL, -1, "RoMo Transfer")
frame.Show(true)
# Tell wxWindows that this is our main window
self.SetTopWindow(frame)
# Return a success flag
return true
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
#MAIN
#---------------------------------------------------------------------------
if __name__ == '__main__':
app = MyApp(0) # Create an instance of the application class
app.MainLoop() # Tell it to start processing events
#del com_obj.close()
#----------------------------------------------------------------------------