2016-03-20 12 views
-3

Ich versuche, ein Array/Liste von tkinter Etiketten für einen Lohnrechner zu machen, aber wenn ich das Widget an mein Array anhängen, hängt es als int-Datentyp. Ich dachte, das Anhängen würde es mir erlauben, list [widgetIndex] .grid() aufzurufen, aber da es kein Label-Datentyp war, der aus irgendeinem Grund an meine Liste angehängt wurde, gibt es eine Fehlermeldung, dass dieses 'int' -Objekt keine hat Attribut namens "Grid". Warum ist es ein Datentyp int im Gegensatz zum Label-Datentyp, den die Variable definitiv hatte, bevor ich sie angehängt habe?Python anhängen tkinter Widget zur Liste zeigt als int-Wert

def addJob(jc, cc, he, wl, hl, we): 
    jc = jc + 1 
    cc = cc + 2 

    wageLabel = Label(root, text="Wage") 
    hoursLabel = Label(root, text="Hours") 
    wageEntry = Entry(root) 
    hoursEntry = Entry(root) 

    wl.append(wageLabel) 
    hl.append(hoursLabel) 
    we.append(wageEntry) 
    he.append(hoursEntry) 

    wl[jc-1].grid(row =0, column =cc-1, sticky=E) 
    hl[jc-1].grid(row =1, column =cc-1, sticky=E) 
    we[jc-1].grid(row = 0, column=cc) 
    he[jc-1].grid(row = 1, column=cc) 
+3

Ich habe versucht, ein 'Label' in eine' liste' einzufügen und als ich anrief, versuchte ich, seinen Typ zu drucken, bekam ich ''. Können Sie mir sagen, wie Sie Ihren Fehler reproduzieren können? EDIT: Ich kann sogar die 'Grid' Funktion aufrufen. –

+0

Es sieht so aus, als ob "jc" nicht dem letzten Element in jeder "liste" entspricht, was die entsprechenden Widgets sein sollte. Drucke die Länge jeder "Liste" aus, zusammen mit dem, was "jc-1" ist. – TigerhawkT3

+0

jc ist die Anzahl der Jobs, die zuerst 1 ist, also - 1 ist der 0. Index, den ich gerade überprüft habe, und jc-1 ist tatsächlich 0, und die Liste für die Listen sind 2 Indizes lang. –

Antwort

0

Sie initialisieren w1 mit w1 = [ 0 ].

Später fügen Sie einfach an w1 an, so wird Ihre Liste etw. Akk. wie

[ 0, <class 'tkinter.Label'>, <class 'tkinter.Label'>, <class 'tkinter.Label'>, ... ] je nachdem, wie viele Etiketten Sie hinzufügen.

Mit w1 = [] lösen Sie Ihr Problem.

Der Fehler tritt auf, da das erste Element in Ihrer Liste ("0") nicht gerastert werden kann.

Mit print w1 in Ihrer Funktion würde Ihnen dies auf eine ziemlich einfache Weise gezeigt.

Bryan hat Recht, der von Ihnen gepostete Code ist ohne Zweifel in Ordnung für den Zweck, den Sie beabsichtigen, ihn zu verwenden, aber die Initialisierung für Ihre übergebenen Parameter (nicht als Codebeispiel veröffentlicht) definiert ein anderes Verhalten.

Bitte lesen Sie How to create a Minimal, Complete and Verifiable Example. Das Aufspalten von Code in das kleinste Teil, das den Fehler noch immer reproduziert, führt Sie meist direkt zur Lösung.