Reputation: 23
I have this program i'm trying to create, and basically i need to make 8 rows of buttons in tkinter but i can't figure out how i could do this with a loop , without a loop i did this :
def decimal():
app = Toplevel(root)
app.title("Traducteur décimal")
app.geometry("400x200")
r1 = Button(app, text="LED 1 ON")
r2 = Button(app, text="LED 1 OFF")
r1.place(x=125,y=0)
r2.place(x=225,y=0)
r3 = Button(app, text="LED 2 ON")
r4 = Button(app, text="LED 2 OFF")
r3.place(x=125, y=40)
r4.place(x=225, y=40)
r5 = Button(app, text="LED 3 ON")
r6 = Button(app, text="LED 3 OFF")
r5.place(x=125, y=80)
r6.place(x=225, y=80)
By the way i'm sorry for the bad English. Thanks
Upvotes: 2
Views: 177
Reputation: 18315
A way is to put them all in a list
of 2-tuples
with a for
loop. Being a list, you can access its elments after via indexing:
buttons = []
x_loc_on, x_loc_off = (125, 225)
y_start = 0
y_offset = 40
commands = [<16 functions here>]
for row in range(8):
# calculate the pair's y-position based on row
y_pos_of_row = y_start + row * y_offset
# get the row number (starts from 1 unlike the variable `row`; so adding 1)
row_number = row + 1
# generate the ON button
button_1 = Button(app, text=f"LED {row_number} ON", command=commands[row])
button_1.place(x=x_loc_on, y=y_pos_of_row)
# generate the OFF button
button_2 = Button(app, text=f"LED {row_number} OFF", command=commands[row+1])
button_2.place(x=x_loc_off, y=y_pos_of_row)
# put this row's ON-OFF button pair as a 2-tuple into a list
buttons.append((button_1, button_2))
Then you can access i
th row and ON
button via buttons[i][0]
and same row OFF
button via buttons[i][1]
.
Upvotes: 1