2017-12-15 6 views
-2

다음과 같은 문제가 있습니다. 7 x 7 격자가 버터로 채워져 있고 다음과 같은 문제가 있습니다 : 버튼을 사용하여 나중에 텍스트를 바꾸고 싶지만 도움이 필요합니다. 행과 열 중에서 어떻게 가능합니까?파이썬 Tkinter는 행과 열로 버튼 텍스트를 변경합니다.

import tkinter as tk 

def click(row, col): 
    print(row, col) 
    label.configure(text="you clicked row %s column %s" % (row, col)) 

test_text = "TEST" 

root = tk.Tk() 
for row in range(1,8): 
    for col in range(1,8): 
     button = tk.Button(root, text=test_text, 
          command=lambda row=row, col=col: click(row, col)) 
     button.grid(row=row, column=col, sticky="nsew") 
label = tk.Label(root, text="") 
label.grid(row=8, column=1, columnspan=8, sticky="new") 

root.grid_rowconfigure(10, weight=1) 
root.grid_columnconfigure(10, weight=1) 


root.mainloop() 
+0

여러 가지 방법으로이를 수행 할 수 있습니다. – Nae

+0

나에게 힌트 나 해결책을 줄 수 있습니까? – Andre

답변

0

텍스트를 변경하려면 버튼을 참조해야합니다. 다음은 그 예입니다.

import tkinter as tk 

def click(row, col): 
    print(row, col) 
    label.configure(text="you clicked row %s column %s" % (row, col)) 
    buttons[row-1][col-1].config(text='Foo') 

test_text = "TEST" 

root = tk.Tk() 

buttons = [] 
for row in range(1,8): 
    button_row = [] 
    for col in range(1,8): 
     button = tk.Button(root, text=test_text, 
          command=lambda row=row, col=col: click(row, col)) 
     button.grid(row=row, column=col, sticky="nsew") 
     button_row.append(button) 
    buttons.append(button_row) 

label = tk.Label(root, text="") 
label.grid(row=8, column=1, columnspan=8, sticky="new") 

root.grid_rowconfigure(10, weight=1) 
root.grid_columnconfigure(10, weight=1) 


root.mainloop() 

나는 인덱스를 해결하기 위해 핸들러에 row-1col-1을 사용했다.

+0

thx 작동 – Andre

+0

배열에 뭔가 바뀌었지만 아직 -1이 필요 없습니다 – Andre

+0

행과 열 매개 변수가 'buttons'에서 하나씩 떨어져 있기 때문에 감소는 'click' 처리기에서만 필요합니다. 배열 색인. 인덱스를 직접 사용하면 감소가 필요 없습니다. – FamousJameous