Auswahl auslesen und abspeichern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
bady
User
Beiträge: 5
Registriert: Mittwoch 2. Dezember 2009, 18:21
Kontaktdaten:

Hallo!

Ich bin noch ziemlich neu in der Python Welt und steh gerade vor einem kleinen Problem.
Ich möchte ein Programm schreiben mit der man einen "Seminarschein" erstellen kann.
Sas Seminar-Verzeichnis (eine *.dat Datei) lade ich mit File_o = codecs.open usw ein.
Der Inhalt der Datei wird dann als Tree in einem wx.TreeCtrl geschoben.
Das klappt soweit auch.
Nun wollte ich das mir die Doppelgeklickten Tagungen in ein StaticText Fenster geschrieben werde (Welches ich zur Erstellung des Scheines dann zusammen mit den Feldern: Name/Nachname auslese und speicher).
Das Auslesen (Name, Nachname) und speichern funktioniert nur wie bekomme ich die "Auswahl" in das dafür Vorgesehende Feld?

Kann mir da wer weiterhelfen?

Danke im Vorraus!!!!
IoI
User
Beiträge: 68
Registriert: Dienstag 1. Dezember 2009, 11:39

Ich würde dir gerne helfen, aber ich hab noch nicht wirklich verstanden was dein Problem ist :roll:

Du hast ein wx.TreeCtrl und neues Fenster, richtig? Und was klappt jetzt noch nicht?
bady
User
Beiträge: 5
Registriert: Mittwoch 2. Dezember 2009, 18:21
Kontaktdaten:

Sorry das ich mich so lange nicht gemeldet habe.

Also ich habe ingesamt 1 fenster. das Fenster hat links einen Tree (wo die auszuwählenden Seminare in Gruppen aufgelistet sind), rechts oben habe ich ein paar zeilen wo man name usw des Benutzers eingeben kann. Da drunter habe ich ein Feld(textctrl) in dem die Auswahl vom Tree angezeigt werden soll.
Das Auslesen der Auswahl habe ich jetzt mit pydata hinbekommen.
Da mir die Auswahl aber wegen dem textctrl immer überschrieben wurde möchte ich daraus jetzt eine listctrl machen.
Kann mir vllt jemand sagen wie ich die Auswahl ins Auswahlfenster "adde"?
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo,

ich hoffe ich habe dich richtig verstanden. Die wxList Klasse verügt über eine Methode Append. Mit dieser kannst du Objekte an die Liste anhängen.

Grüße
Martin
bady
User
Beiträge: 5
Registriert: Mittwoch 2. Dezember 2009, 18:21
Kontaktdaten:

Also mit InsertStringItem schaffe ich es nun das er mir etwas in die Zeile schreibt. Allerdings erscheint da nicht das gewählte sondern:"<wx._controls.TreeItemId; proxy of....................."

Was mach ich jetzt wieder falsch? ;-)
bady
User
Beiträge: 5
Registriert: Mittwoch 2. Dezember 2009, 18:21
Kontaktdaten:

damit das helfen einfacher ist: hier etwas code

Code: Alles auswählen

#------------------------------------------------------------------------------
class MainFrame(wx.Frame):
#------------------------------------------------------------------------------
   def __init__(self):
      wx.Frame.__init__(self, None, -1, 'Seminarschein Drucker', size=(650, 480), style=wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU)
      panel = wx.Panel(self, -1)  
#-----------------------------------------------------------------------------
# Textfelder erstellen
#-----------------------------------------------------------------------------
      self.NachnameLabel = wx.StaticText(panel, -1, u"Nachname:",(280,05))
      self.Nachname=wx.TextCtrl(panel, -1, "", (280,20), (100,-1))
      self.VornameLabel = wx.StaticText(panel, -1, u"Vorname:",(400,05))
      self.Vorname=wx.TextCtrl(panel, -1, "", (400,20), (100,-1))
      self.MatrikelLabel = wx.StaticText(panel, -1, u"Matrikelnummer:",(520,05))
      self.Matrikel=wx.TextCtrl(panel, -1, "", (520,20), (100,-1))
      self.gewaehltLabel = wx.StaticText(panel, -1, u"Gewählte Veranstaltungen",(280,60))
      #self.gewaehlt=wx.TextCtrl(panel, -1, "", (280,75), (300,300))
      self.gewaehlt=wx.ListCtrl(panel,-1,(280,75),(300,300),style=wx.LC_REPORT| wx.BORDER_NONE|wx.LC_SORT_ASCENDING| wx.LC_SINGLE_SEL)
      self.gewaehlt.InsertColumn(0,"Wahl")  
      self.gewaehlt.SetColumnWidth(0, 250) 
      count=0
      
#-----------------------------------------------------------------------------
# Einlesen der im Verzeichnis vorhandenen Datei und Erstellung des Trees
#-----------------------------------------------------------------------------      
      File_o = codecs.open("tagungen.dat", "rU", "utf-8")
      TListe_o = eval(File_o.read())  
      File_o.close()
      self.TagungsTree = wx.TreeCtrl(panel,-1, (5,05), (250,380))
      TagungsTreeroot = self.TagungsTree.AddRoot(u"Seminarplan") 
      self.TagungsTree.SetPyData(TagungsTreeroot,"TREEROOT")
      for x in TListe_o:
         currentkat=self.TagungsTree.AppendItem(TagungsTreeroot,x[0].decode("utf-8"))
         for y in x:
            if len(y[0])>1:
               gewaehlt=self.TagungsTree.AppendItem(currentkat,y[0].decode("utf-8")+" ("+y[1].decode("utf-8")+")")
               self.TagungsTree.SetPyData(gewaehlt,x[0].decode("utf-8")+"|"+y[0].decode("utf-8")+"|"+y[1].decode("utf-8"))
      self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnTreeRightClick)
      self.TagungsTree.Expand(TagungsTreeroot)
#-----------------------------------------------------------------------------
#Öffnen einer anderen Datei
#-----------------------------------------------------------------------------      
   def OnOpenFormButtonClick(self, event):
      self.TagungsTree.SetLabel("") 
      self.directory = os.getcwd() 
      self.open = wx.FileDialog(self, u'Bitte Datei zum Laden wählen', self.directory, '', '*.dat', wx.FD_OPEN | wx.FD_CHANGE_DIR)
   
          
      if self.choose_open == wx.ID_OK:
         try:
            wx.MessageBox(u"Öffnen erfolgreich!", "Info", wx.OK | wx.ICON_INFORMATION)
         except IOError, error:
            wx.MessageBox("Fehler:\n" + str(error), "Info", wx.OK | wx.ICON_INFORMATION) 
      
#----------------------------------------------------------------------------
# Beim Rechtsklick auf den Tree Auswahl speichern
#----------------------------------------------------------------------------
   def OnTreeRightClick(self, event):
      item = event.GetItem()
      
      self.gewaehlt.InsertStringItem(0,str(item))
#----------------------------------------------------------------------------
# Reset des Formulars
#----------------------------------------------------------------------------
   def OnResetFormButtonClick(self, event):      
      self.Nachname.SetLabel("")
      self.Vorname.SetLabel("")
      self.Matrikel.SetLabel("")
      self.gewaehlt.SetLabel("")            
           
      self.TagungsTree.CollapseAll()               # Zusammenklappen des Trees
      self.TagungsTree.Expand(self.TagungsTree.GetRootItem()) 
#-----------------------------------------------------------------------------
if __name__ == '__main__':
#------------------------------------------------------------------------------
   app = wx.PySimpleApp()
   MainFrameInstance=MainFrame()
   MainFrameInstance.Show()
   app.MainLoop()


Edit: Sorry hatte vergessen Python auszuwählen. Nu ists in Farbe
Zuletzt geändert von bady am Mittwoch 13. Januar 2010, 19:14, insgesamt 1-mal geändert.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Es gibt einen Button, das steht Python drauf. Damit erscheint das ganze auch in Farbe :shock:
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
bady
User
Beiträge: 5
Registriert: Mittwoch 2. Dezember 2009, 18:21
Kontaktdaten:

Mit dieser Änderung klappt es.

Code: Alles auswählen

 def OnTreeRightClick(self, event):
      item = event.GetItem() 
      test = self.TagungsTree.GetItemData(item).GetData()
      
      self.gewaehlt.InsertStringItem(0,test)


Aber wie kann ich das Listctrl auslesen um die Daten z.b. in einer txt Datei zu speichern?
mit nem Textctrl geht es ja so:

Code: Alles auswählen

         data+= "\nMatrikelnummer: "+self.Matrikel.GetLabel()
Antworten