it-swarm.com.de

Konvertiere Tuple in int in Python

Ich bin ganz neu bei Python und habe die anderen Antworten auf diese Frage nicht verstanden. Warum konvertiert int(weight[0]) die Variable "weight" nicht in eine Ganzzahl, wenn ich meinen Code ausführe? Versuchen Sie Ihr Bestes, um es zu verdummeln, denn ich bin wirklich neu und verstehe das meiste immer noch nicht ganz. Hier ist der relevante Abschnitt meines Codes

weight = (lb.curselection())
    print ("clicked")
    int(weight[0])
    print (weight)
    print (type(weight))

und hier ist mein Code für dieses Skript

lb = Listbox(win, height=240)
lb.pack()
for i in range(60,300):
    lb.insert(END,(i))
def select(event):
    weight = (lb.curselection())
    print ("clicked")
    int(weight[0])
    print (weight)
    print (type(weight))
lb.bind("<Double-Button-1>", select)

Vielen Dank

Wenn ich den Code starte, kommt TypeError: int() argument must be a string, a bytes-like object or a number, not 'Tuple' Und ich möchte, dass stattdessen die Variable "weight" in eine Ganzzahl umgewandelt wird, sodass ich sie für mathematische Operationen verwenden kann.

Vollständiges Traceback: Traceback (most recent call last): File "C:\Users\Casey\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__ return self.func(*args) File "C:/Users/Casey/AppData/Local/Programs/Python/Python36-32/s.py", line 11, in select int(weight) TypeError: int() argument must be a string, a bytes-like object or a number, not 'Tuple'

2
casey ryan

was Sie suchen, ist

weight = int(weight[0])

int ist eine Funktion, die liefert eine Ganzzahl, daher müssen Sie diese Rückgabe einer Variablen zuweisen.

wenn Sie die Variable weight mit dem Wert des ersten Datensatzes neu zuweisen möchten, sollte dieser Code für Sie funktionieren.

Wenn das Element bereits eine ganze Zahl ist, kann der Aufruf int möglicherweise redundant sein

weight = weight[0]
9
Stael

Ich habe bemerkt, dass Sie hier lb.bind("<Double-Button-1>", select) verwendet haben. Dadurch wird das Problem mit curselection() umgangen, wobei das zuletzt ausgewählte Listenelement zurückgegeben wird. Ich würde jedoch sagen, dass die Verwendung von lb.bind('<<ListboxSelect>>', select) besser wäre. Das Binden an <<ListboxSelect>> funktioniert, da dieses Ereignis ausgelöst wird, nachdem die Auswahl geändert wurde. Wenn Sie stattdessen curselection() mit diesem Ereignis aufrufen, erhalten Sie die richtige Ausgabe, nach der Sie suchen.

Hier ist ein bisschen Code, der ein Beispiel für die Verwendung des <<ListboxSelect>>-Ereignisses bietet:

import tkinter as tk


class Application(tk.Frame):

    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        self.parent = parent
        self.lb = tk.Listbox(self.parent, height=4)
        self.lb.pack()
        self.lb.bind('<<ListboxSelect>>', self.print_weight)
        for item in ["one: Index = 0", "two: Index = 1", "three: Index = 2", "four: Index = 3"]:
            self.lb.insert("end", item)

    def print_weight(self, event = None):
        # [0] gets us the 1st indexed value of the Tuple so weight == a number.
        weight = self.lb.curselection()[0] 
        print(weight)


if __== "__main__":
    root = tk.Tk()
    app = Application(root)
    root.mainloop()

Sie werden feststellen, dass der Ausdruck in der Konsole das aktuell ausgewählte Element mit einem einzigen Klick ist. Dadurch wird ein Doppelklick vermieden.

0
Mike - SMT