У вас много повторений и бесполезно globals
.Вы можете использовать функции lambda
для передачи параметров в функцию обратного вызова.Я отредактировал ваш код, чтобы проиллюстрировать его:
import tkinter as tk
jeopardy = tk.Tk()
jeopardy.geometry("1000x500")
jeopardy.configure(background="blue")
#------------Questions---------------
def questions(x, y):
questiontext = f"question{x}{y}"
extra_window = tk.Toplevel(jeopardy)
lab = tk.Label(extra_window, text=questiontext)
lab.pack()
#------------Buttongrid---------------
tk.Grid.rowconfigure(jeopardy, 0, weight=1)
tk.Grid.columnconfigure(jeopardy, 0, weight=1)
frame= tk.Frame(jeopardy)
frame.grid(row=0, column=0, sticky="nsew")
for x in range(5):
tk.Grid.rowconfigure(frame, x, weight=1)
for y in range(5):
tk.Grid.columnconfigure(frame, y, weight=1)
text = 100*(y+1)
btn = tk.Button(frame, text=str(text), command=lambda x=x, y=y: questions(x, y))
btn.grid(column=x, row=y, sticky="nsew")
jeopardy.mainloop()
lambda x=x , y=y : ...
избегает x, y всегда являясь последними значениями цикла, указанного в комментарии @Herny Yik.