我是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'
答案 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()
您会注意到,只需单击一下,控制台中的打印输出就是当前所选项目。这样可以避免双击。