在Python中将元组转换为int

时间:2017-08-02 15:48:43

标签: python python-3.x tkinter

我是python的新手,并没有理解这个问题的其他答案。为什么当我运行我的代码时,int(weight[0])不会转换变量" weight"成一个整数。尽力使其愚蠢,因为我真的很新,但仍然不太了解它的大部分内容。这是我的代码的相关部分

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

并且继承了我对此脚本的代码

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)

由于

当我运行代码时,它会出现TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple' 而我希望它转换为&#34; weight&#34;变量为整数,所以我可以用它来进行数学运算。

完整追溯: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 个答案:

答案 0 :(得分:10)

你正在寻找的是

weight = int(weight[0])

int返回整数的函数,因此您必须将该返回值分配给变量。

如果您要查找的是将变量weight重新分配给其第一条记录的值,则该代码应该适合您。

如果该项目已经是一个整数,那么int调用可能是多余的,您可以通过

来获取它
weight = weight[0]

答案 1 :(得分:0)

我注意到你在这里使用lb.bind("<Double-Button-1>", select)。这确实解决了curselection()返回最后一个选定列表项的问题,但我想说使用lb.bind('<<ListboxSelect>>', select)会更好地为此工作。绑定到<<ListboxSelect>>是有效的,因为此事件在选择更改后触发,当您使用此事件调用curselection()时,您将获得正在寻找的正确输出。

以下是一些代码,它提供了<<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 __name__ == "__main__":
    root = tk.Tk()
    app = Application(root)
    root.mainloop()

您会注意到,只需单击一下,控制台中的打印输出就是当前所选项目。这样可以避免双击。