0

これは私の最初の Python プログラムであり、if ステートメントは正しいと思います。正しいかどうかはわかりません。私がやりたいことは、Tkinter ボタンがクリックされたときに、どの画像がボタンに表示されているかを確認するために呼び出される関数が必要であり、それに応じてその画像を変更することです。

関数のコードは次のとおりです。

def update_binary_text(first,second):
    if buttonList[first][second]["image"] == photo:
        buttonList[first][second]["image"] = photo1

コマンドを使用した for ループ [ボタンの 2d リスト] は次のとおりです。

for i in range (0,number):
        buttonList.append([])
        for j in range(0,number):
            print(i,j)
            buttonList[i].append(Button(game, borderwidth=0,highlightthickness=0, image=photo,command = lambda i=i, j=j: update_binary_text(i,j)))
            buttonList[i][j].grid(row=i*20,column=j*20)

問題は、これを実行すると正常に開きますが、すべてのボタンをクリックしても何も起こりません。if文を抜き出して代入すれば動くのですが、どの画像が先に表示されるかを確認する必要があります。
誰にも解決策がありますか?


別の問題に遭遇しました。以前に受け取ったソリューションは問題なく機能し、画像を変更しましたが、最初のクリックのみでした. その後、再び変わることはありません。

コードは次のとおりです。

def update_binary_text(first,second):
        #print("Called")
        if buttonList[first][second].image == photo:
                buttonList[first][second]["image"] = photo0
        elif buttonList[first][second].image == photo0:
                buttonList[first][second]["image"] = photo1

何が起こるかというと、ボタンを初めてクリックすると、空白のボタンから画像のあるボタンに変わり、もう一度クリックすると画像が変わるはずですが、そうではありません。誰かが見たい場合は、ここに初期化するステートメントがありますphotophoto0、およびphoto1:

photo = PhotoImage(file ="blank.gif")
photo0 = PhotoImage(file="0.gif")
photo1 = PhotoImage(file="1.gif")
4

1 に答える 1

1

の型が何かはわかりませんがphoto、Button のオプションとして使用する場合、文字列にすることはできません。問題はbuttonList[first][second]["image"]、コンストラクターで使用するオブジェクトではなく、文字列を返すことです。

簡単な解決策は、_photo各ボタン ウィジェットへの参照を追加し、それを使用しphotoて if ステートメントで比較することです。

def update_binary_text(first,second):
    if buttonList[first][second]._photo == photo:
        buttonList[first][second]["image"] = photo1

# ...

def create_button(i, j):
    button = Button(game, borderwidth=0, highlightthickness=0, image=photo,
                    command = lambda i=i, j=j: update_binary_text(i,j))
    button._photo = photo
    return button

buttonList = [[create_button(i, j) for j in range(number)] for i in range(number)]
于 2013-05-04T02:18:08.527 に答える