Seite 1 von 1

wx / InsertStringItem

Verfasst: Samstag 5. Januar 2008, 01:22
von Hobbes Hobson

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.

Re: wx / InsertStringItem

Verfasst: Samstag 5. Januar 2008, 02:47
von gerold
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
:-)

Verfasst: Samstag 5. Januar 2008, 12:58
von Hobbes Hobson
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

Verfasst: Samstag 5. Januar 2008, 15:26
von Hobbes Hobson
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?

Verfasst: Samstag 5. Januar 2008, 15:42
von gerold
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
:-)

Verfasst: Samstag 5. Januar 2008, 16:02
von Hobbes Hobson

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 :)

Verfasst: Montag 4. Februar 2008, 18:52
von gerold
Hallo Hobbes Hobson!

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

mfg
Gerold
:-)