2013-05-03 2 views
0

이것은 내 첫 번째 Python 프로그램이며 if 문이 정확하다고 생각합니다. 모르겠다. 모르겠다. Tkinter 버튼을 클릭하면 버튼에 어떤 이미지가 표시되는지 확인하고 그에 따라 이미지를 변경하는 기능이 필요합니다. 나는이 프로그램을 실행할 때If 문이있는 Tkinter 버튼

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) 

문제는,이 열립니다 :

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

는이 명령을 루프 [버튼의 2D 목록]을 위해이다 :

여기 함수에 대한 내 코드입니다 괜찮아요,하지만 모든 버튼을 클릭하면 아무 일도 일어나지 않습니다. 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 

내가 처음으로 어떤 버튼을 클릭하면 내가 그것을 클릭하면, 그것은 그것에 이미지와 버튼에 빈 버튼 변경됩니다되어 발생 다시 이미지가 바뀌어야하지만 그렇지 않습니다. 사람이 여기보고 싶었다 경우 photo, photo0를 초기화하는 문장, 그리고 photo1 :

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

답변

1

내가 photo의 유형이 무엇인지 모르겠지만, 당신은 버튼의 옵션으로 사용하는 경우가 될 수 없습니다 끈. 문제는 buttonList[first][second]["image"]이 생성자에서 사용하는 객체가 아니라 문자열을 반환한다는 것입니다.

빠른 해결책은 if 문에 photo와 비교하는 데 사용할 각 버튼 위젯에 _photo 참조를 추가 할 수 있습니다 :

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)] 
+0

당신에게 선생님 감사합니다! 나는 ._photo로 시도해 보았고 행운은 없었고 대신 button.image를 시도했다. 감사! – vap

+0

@vap 그렇습니다. 다른 방법도 구현해야하기 때문입니다 (if 문은'.photo == photo1','image' 옵션은'photo'로 설정됩니다). –

+0

오! 이제 나는 그것이 왜 있는지 봅니다. 다시 한 번 감사드립니다! – vap