web-dev-qa-db-fra.com

Convertir Tuple en int en Python

Je suis nouveau chez Python et je n'ai pas compris les autres réponses à cette question. Pourquoi, lorsque je lance mon code, int(weight[0]) ne convertit-il pas la variable "weight" en un entier. Faites de votre mieux pour le calmer parce que je suis vraiment nouveau et que je ne comprends toujours pas bien la majeure partie. Voici la section pertinente de mon code

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

et voici mon code pour ce script

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)

Merci

Lorsque je lance le code, il affiche TypeError: int() argument must be a string, a bytes-like object or a number, not 'Tuple' Je souhaite plutôt convertir la variable "weight" en un entier afin de pouvoir l'utiliser pour des opérations mathématiques.

Traceback complet: 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

ce que vous cherchez c'est

weight = int(weight[0])

int est une fonction qui renvoie un entier, vous devez donc affecter ce retour à une variable.

si vous cherchez à réaffecter la variable weight à la valeur de son premier enregistrement, ce code devrait fonctionner pour vous.

Si l'élément est déjà un entier, alors l'appel int peut être redondant, vous pourrez peut-être l'obtenir avec juste

weight = weight[0]
9
Stael

J'ai remarqué que vous utilisiez lb.bind("<Double-Button-1>", select) ici. Cela permet de contourner le problème avec curselection() renvoyant le dernier élément de la liste sélectionné mais je dirais que l'utilisation de lb.bind('<<ListboxSelect>>', select) fonctionnerait mieux pour cela. La liaison à <<ListboxSelect>> fonctionne car cet événement se déclenche une fois la sélection modifiée et lorsque vous appelez curselection() à l'aide de cet événement, vous obtiendrez le résultat correct que vous recherchez.

Voici un peu de code qui fournit un exemple d'utilisation de l'événement <<ListboxSelect>>:

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

Vous remarquerez que l’impression dans la console correspond à l’élément sélectionné en un clic. Cela évitera la nécessité d'un double clic.

0
Mike - SMT