私はpythonがまったく新しいので、この質問に対する他の回答を理解できませんでした。なぜコードを実行するときに、int(weight[0])
が変数の「重み」を整数に変換しないのですか。私は本当に新しいのですが、ほとんどのことをまだよく理解していないので、よく試してみてください。これが私のコードの関連セクションです
_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'
が表示されます。代わりに、「重み」変数を整数に変換して、数学演算に使用できるようにします。
完全なトレースバック: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'
あなたが探しているのは
weight = int(weight[0])
int
は関数returns整数なので、その戻り値を変数に割り当てる必要があります。
探しているものが変数weight
に最初のレコードの値を再割り当てする場合、そのコードはうまくいくはずです。
アイテムがすでに整数である場合、int
呼び出しは冗長になる可能性があります。
weight = weight[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()
_
コンソールでの印刷は、シングルクリックで現在選択されているアイテムになります。これにより、ダブルクリックの必要がなくなります。