wx / InsertStringItem

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Code: Alles auswählen

class SListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
    def __init__(self, parent):
        wx.ListCtrl.__init__(
            self, parent, -1, 
            style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES
            )
        
        listmix.ListCtrlAutoWidthMixin.__init__(self)
        
        for i, desc in ((0, "Date"),(1, "Time"),(2, "__name__"),(3, "Type"),(4, "Descriction")):
            self.InsertColumn(i,desc) #Spalten erzeugen
            

        items = serverlog.DBControl().auslesen()
        
        self.InsertStringItem(maxint, '') 

Code: Alles auswählen

return _controls_.ListCtrl_InsertStringItem(*args, **kwargs)
PyAssertionError: C++ assertion "m_count == ListView_GetItemCount(GetHwnd())" failed at ..\..\src\msw\listctrl.cpp(1583) in wxListCtrl::InsertItem(): m_count should match ListView_GetItemCount

Ich kann den Fehler nicht deuten, bzw ich nicht warum das nicht klappt.

Und was mich auch interessiert, warum man an der stelle index_to_place_at maxint nimmt.

Vielen Dank schonmal im voraus.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hobbes Hobson hat geschrieben:Ich kann den Fehler nicht deuten, bzw ich nicht warum das nicht klappt.

Und was mich auch interessiert, warum man an der stelle index_to_place_at maxint nimmt.
Hallo Hobbes Hobson!

Ich habe mir das Beispiel aus der Demo genommen und zum Testen leicht angepasst:

http://paste.pocoo.org/show/19439/

Das Beispiel funktioniert so. Bitte teste ob es auch bei dir funktioniert. Und was ist bei dir ``maxint``?

Ich habe im Quellcode nirgends dieses "index_to_place_at" gefunden. ``sys.maxint`` kann man nehmen um sich das mitzählen eines eigenen Index zu ersparen. Das ist alles. Wenn du es los werden möchtest, dann kannst du dir mit ``enumerate()`` einen Index mitgenerieren lassen.

Code: Alles auswählen

for index, stringitem in enumerate(["Hallo", "Welt"]):
    ....
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Hallo Gerold,

danke für deine Antwort. maxint ist in diesem Fall sys.maxint (from sys import maxint).

Das index_to_place_at habe ich aus dem wxPyWiki: http://wiki.wxpython.org/ListControls

Ich hatte ebenfalls das Beispiel aus der Demo verwendet, aber es anscheinend falsch geändert. (Es lag am Panel)

Mit deinem Panel gehts es jetzt :)

Vielen Dank
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Ich stell die Frage am besten hier:

In dieser GUI habe ich in der ersten Spalte Nummer (1,2,3...) stehen. Ich möchte diese nun sortieren. Das Problem ist nur, dass er die Werte als string ansieht (so wurden sie auch reingeschrieben) und dementsprechend 1,10,100,1000,1001,1002 .... ausgibt.

Wie bekomme ich hin, dass der das als int ansieht, bzw. wie schreibe ich eine zahl (int) in die Tabelle?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hobbes Hobson hat geschrieben:1,10,100,1000,1001,1002 .... ausgibt.

Wie bekomme ich hin, dass der das als int ansieht, bzw. wie schreibe ich eine zahl (int) in die Tabelle?
Hallo Hobbes Hobson!

Am Einfachsten ist es, wenn du die Zahlen mit führenden Nullen in das ListCtrl schreibst. Alles Andere ist unnötiger Aufwand, wenn man nicht unbedingt darauf angewiesen ist, dass da "1", statt "0001" steht.

Code: Alles auswählen

"%04i" % 1
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Code: Alles auswählen

def get0(numbers):
    maxi = max(numbers)
    laenge = len(str(maxi))
    liste = []
    ausdr = '%%0%ii' % laenge
    for i in numbers:
        liste.append(ausdr % i)
    return liste
naja was solls ;)

Zwar unschön, aber Danke :)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Hobbes Hobson!

Das könnte vielleicht etwas für dich sein:
http://www.python-forum.de/post-89336.html#89336

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten