web-dev-qa-db-ja.com

Pythonでタプルをintに変換します

私は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'

3
casey ryan

あなたが探しているのは

weight = int(weight[0])

intは関数returns整数なので、その戻り値を変数に割り当てる必要があります。

探しているものが変数weightに最初のレコードの値を再割り当てする場合、そのコードはうまくいくはずです。

アイテムがすでに整数である場合、int呼び出しは冗長になる可能性があります。

weight = weight[0]
18
Stael

ここで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()
_

コンソールでの印刷は、シングルクリックで現在選択されているアイテムになります。これにより、ダブルクリックの必要がなくなります。

0
Mike - SMT