Refresh, ernuern des Mainframes?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Hallo Community ich bins mal wieder!

Also ich habe einen Mainframe: http://www.imgupload.org/images/912_omfgwx.jpg

Den ich auch editieren kann mit doopelklick auf eine Zelle! (von der wxPythondemo abgeschaut), ich hatte vorher das selbe Layout nur ohne Doppelklick (damits nicht heist ich kopier nur alles)

wenn ich jetzt auf Neue Kontaktliste klicke: http://www.imgupload.org/images/989_omfgwxnk.jpg dann soll der komplette inhalt der Zellen gelöscht werden, hier mal mein Code!

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*- 

# adressbuch-gui.py

import wx
import wx.lib.mixins.listctrl

import webbrowser
import sys
import os

### Variabeln deklarieren
version = '0.09'
wildcard = "OmegaAdressbuch Datein (*.oad)|*.oad"        \



temp = {
0 : ("test", "test test test", "test"),
1 : ("test", "test", "test"),
2 : ("test", "test", "test"),
3 : ("test", "test", "test"),
4 : ("test", "äüößÖÄÜ?ß", "test"),
5 : ("x", "x", "x")
}



# AdressbuchMainFenster
class Adressen(wx.ListCtrl, wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin, wx.lib.mixins.listctrl.TextEditMixin):
    def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0):
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)

        wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin.__init__(self)
        self.Columns()
        wx.lib.mixins.listctrl.TextEditMixin.__init__(self)

    def Columns(self):
        self.InsertColumn(0, 'Name')
        self.InsertColumn(1, 'Adresse')
        self.InsertColumn(2, 'E-Mail')

        items = temp.items()
        for key, data in items:
            index = self.InsertStringItem(sys.maxint, data[0])
            self.SetStringItem(index, 1, data[1])
            self.SetStringItem(index, 2, data[2])
            self.SetItemData(index, key)

        self.SetColumnWidth(0, 138)
        self.SetColumnWidth(1, 185)
        self.SetColumnWidth(2, 165)

        self.currentItem = 0

# Klasse für das Hauptfenster
class mainfenster (wx.Frame):
    def __init__ (self, parent, id, title,):
        wx.Frame.__init__(self, parent, id, title, size=(500, 300))
        
        # Menübar erstellen
        menubar = wx.MenuBar()
        
######### 1. Menü erstellen
        menu1 = wx.Menu()
        # Untermenüs für 1. Menü erstellen
        neu = wx.MenuItem(menu1, 11, 'Neue Kontaktliste\tCtrl+N')
        neu.SetBitmap(wx.Bitmap('icons/new.png'))
        laden = wx.MenuItem(menu1, 12, 'Kontaktliste laden\tCtrl+L')
        laden.SetBitmap(wx.Bitmap('icons/open.png'))
        speichern = wx.MenuItem(menu1, 13, 'Kontaktliste speichern\tCtrl+S')
        speichern.SetBitmap(wx.Bitmap('icons/save.png'))
        beenden = wx.MenuItem(menu1, 14, 'Beenden\tCtrl+Q') # beenden id = 3
        beenden.SetBitmap(wx.Bitmap('icons/exit.png'))
        # Untermenüs zum 1. Menü hinzufügen
        menu1.AppendItem(neu)
        menu1.AppendItem(laden)
        menu1.AppendItem(speichern)
        menu1.AppendItem(beenden)
        
######### 2. Menü erstellen
        menu2 = wx.Menu()
        # Untermenüs für 2. Menü erstellen
        kontakth = wx.MenuItem(menu2, 21, 'Kontak hinzufügen\tCtrl+H') # Neuer Kontakt id = 1
        kontakth.SetBitmap(wx.Bitmap('icons/add.png'))
        kontaktd = wx.MenuItem(menu2, 22, 'Kontakt löschen\tCtrl+D') # Kontaktlöschen id = 2
        kontaktd.SetBitmap(wx.Bitmap('icons/del.png'))
        kontakts = wx.MenuItem(menu2, 23, 'Kontakt suchen\tCtrl+F')
        kontakts.SetBitmap(wx.Bitmap('icons/search.png'))
        # Untermenüs zum 2. Menü hinzufügen
        menu2.AppendItem(kontakth)
        menu2.AppendItem(kontaktd)
        menu2.AppendItem(kontakts)        

######## 3. Menü erstellen
        menu3 = wx.Menu()
        # Untermenüs für 3. Menü erstellen
        about = wx.MenuItem(menu3, 31, 'About')
        about.SetBitmap(wx.Bitmap('icons/about.png'))
        internet = wx.MenuItem(menu3, 32, 'Omega im Internet!')
        internet.SetBitmap(wx.Bitmap('icons/web.png'))
        # Untermenüs zum 3. Menü Hinzufügen
        menu3.AppendItem(about)
        menu3.AppendItem(internet)
        
######### Den Untermenüs per ID eine Funktion 
        # 1. Menü
        self.Bind(wx.EVT_MENU, self.NewKontaktliste, id=11)
        self.Bind(wx.EVT_MENU, self.LoadKontaktliste, id=12)
        self.Bind(wx.EVT_MENU, self.SaveKontaktliste, id=13)
        self.Bind(wx.EVT_MENU, self.OnQuit, id=14)
        # 2. Menü
        self.Bind(wx.EVT_MENU, self.NewKontakt, id=21)
        self.Bind(wx.EVT_MENU, self.DeleteKontakt, id=22)
        self.Bind(wx.EVT_MENU, self.SearchKontakt, id=23)
        # 3. Menü
        self.Bind(wx.EVT_MENU, self.About, id=31)
        self.Bind(wx.EVT_MENU, self.Internet, id=32)
        
######### Menüs zur Menübar hinzufügen und erstellen
        menubar.Append(menu1, '&Hauptmenü')
        menubar.Append(menu2, '&Bearbeiten')
        menubar.Append(menu3, '&About')
        self.SetMenuBar(menubar)

###################################### ENDE MENÜS

######### Adressbuch / Panel
        tID = wx.NewId()

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        self.list = Adressen(self, tID, style=wx.LC_REPORT | wx.LC_SORT_ASCENDING)

        sizer.Add(self.list, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.SetAutoLayout(True)
     
 
###################################### ENDE PANEL
        
        # Alles ausgeben und Einstellungen die mit dem Hauptframe zu tun haben!
        self.Centre()
        self.Show(True)
    
##### Menü-Aktionen ausführen!!
    # 1. Menü
    def NewKontaktliste(self, event):
        temp = {} 
        self.Refresh()       
    def LoadKontaktliste(self, event):
        lkl = wx.FileDialog(self, message='Kontaktliste auswählen', defaultDir=os.getcwd(), defaultFile="", wildcard=wildcard, style=wx.OPEN | wx.CHANGE_DIR)
        if lkl.ShowModal() == wx.ID_OK:
            paths = lkl.GetPaths()
            print paths
        lkl.Destroy()
    def SaveKontaktliste(self, event):
        nkl = wx.FileDialog(self, message='Kontaktliste speichern:', defaultDir=os.getcwd(), defaultFile="", wildcard=wildcard, style=wx.SAVE)
        nkl.SetFilterIndex(2)
        if nkl.ShowModal() == wx.ID_OK:
            path = nkl.GetPath()
            nklfile = file(path, 'w')
            nklfile.write('test')            
        nkl.Destroy()
    def OnQuit(self, event):
        self.Close()
    # 2. Menü   
    def NewKontakt(self, event):
        pass
    def DeleteKontakt(self, event):
        pass
    def SearchKontakt(self, event):
        pass
    # 3. Menü
    def About(self, event):
        pass

adressbuch = wx.App(redirect=False)
wx.SetDefaultPyEncoding('utf-8')
mainfenster(None, -1, 'Ωmega Adressbuch Pre ' + version)
adressbuch.MainLoop()
sry dass die bilder nicht gehen

ich hoffe ihr könnt mir helfen

mfg
Zuletzt geändert von Dav1d am Mittwoch 5. August 2009, 11:45, insgesamt 1-mal geändert.
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo,

füge folgendes hinzu:

Code: Alles auswählen

 def NewKontaktliste(self, event):
        temp = {}
        #löscht alle Einträge aus der Liste
        self.list.DeleteAllItems()

Bitte beachte PEP8 bezüglich der Methodennamen
[wiki=PEP 8 (Übersetzung)]PEP 8[/wiki]

Und benutze um dein Programm zu starten folgendes statt das Programm auf Modulebene zu starten.

Code: Alles auswählen


if __name__ == '__main__':
     adressbuch = wx.App(redirect=False)
      wx.SetDefaultPyEncoding('utf-8')
      mainfenster(None, -1, 'Ωmega Adressbuch Pre ' + version)
      adressbuch.MainLoop()

Grüße
Martin
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Vielen, Dank!!!


jetzt hab ich noch eine Frage, wie kann ich jetzt wieder items hinzufügen?

iich habs schon so versucht:

Code: Alles auswählen

self.list = Adressen(self, -1, style=wx.LC_REPORT | wx.LC_SORT_ASCENDING)
allerdings sieht das Ganue dann ein bisschen entstellt aus: http://www.imgupload.org/images/290_kontakthinzu.jpg
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo,

ich weiß nicht ob du sie eh schon verwendest aber verweis dich mal auf die Doku von wxPython. Siehe unter der Klasse wxListCtrl unter InsertStringItem und SetItem(SetStringItem) nach.

Generell zuerst in der Doku nachschlagen, deine letzte Frage hättest du auch mit einem Blick in Doku selber beantworten können. Falls dann noch was unklar sein sollte kannst du gerne hier Fragen stellen.

Grüße
Martin
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

ja, ich kannte die doku, hab sie auch schonmal durchgesuccht, bin aber nicht auf die Idee gekommen jetzt nachzuschauen :oops:

danke nochmal für deine Hilfe, wenn ichs gar nicht hinbekomm meld ich mich wieder :roll:

mfg

//Edit: Ich wollt mich nur nochmal bedanken, ich habs geschafft dank :)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

so, ich bins wieder :cry:

jetzt geht atm, alles bis auf das Auslesen der gesamten-ListCtrl, ich hab mehrere Beiträge gefunden aber imemr das selbe,

kann man irgendwie alle Items aus ner ListCtrl auslesen?

mfg

//Edit: geschafft!!, was alles nach einem entspannenden Angelausflug alles möglich ist^^

Code: Alles auswählen

###### Die Zeilen der Columns zählen
        sklcountrows = []
        sklgetnext = self.list.GetNextItem(-1)
        while sklgetnext != -1:
            sklcountrows.append(self.list.GetItemText(sklgetnext))
            sklgetnext = self.list.GetNextItem(sklgetnext)
        sklrowmax = len(sklcountrows)
        ###### Den Text aus den Zellen auslesen und in eine Liste schreiben 
        sklgottext = []
        sklcountitems = 0
        sklrowtrue = True
        sklcolumn = 0
        while sklrowtrue:
            sklgottext.append(self.list.GetItem(sklcountitems, sklcolumn).GetText())
            sklcountitems = sklcountitems + 1
            if sklcountitems >= sklrowmax:
                sklcolumn = sklcolumn + 1
                sklcountitems = 0 
                if sklcolumn == 3:
                    sklrowtrue = False
ist vllt für den ein oder anderen wichtig!

Vorraussetztung es muss bekannt sein wie viel Columns man hat!
Antworten