Есть ли способ присвоить значения отдельным кнопкам, которые я создал, используя root.Button.grid в tkinter? - PullRequest
0 голосов
/ 09 апреля 2019

Я делаю игру в крестики-нолики в python / tkinter.

Поэтому я нарисовал сетку 3x3, используя xxx.Button.grid, теперь я хочу назначить свойства каждой кнопке, чтобы я могвходной текст, который будет определять «X» или «O»

Что я хотел бы сделать, это присвоить 1 или (-1) пустому квадрату, который содержит значение 0, таким образом определяя X и O,Я надеюсь, что подобный подход поможет мне найти условия выигрыша.

from tkinter import Tk, Canvas, Frame, Grid, Button, N, S, E, W


root = Tk()
canvas = Canvas()
frame = Frame(root)

root.title("DJB")

root.minsize(300, 300)
root.resizable(False, False)

root.configure(bg='black')
# --------------------------------------------

Grid.rowconfigure(root, 3, weight=1)
Grid.columnconfigure(root, 3, weight=1)

frame=Frame(root)
frame.grid(row=3, column=3, sticky=N+S+E+W)


for row_index in range(3):
    Grid.rowconfigure(frame, row_index, weight=1)
    for col_index in range(3):
        Grid.columnconfigure(frame, col_index, weight=1)
        btn = Button(frame, bg="white") #create a button inside frame
        btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)

Если бы я мог просто ввести код для каждой кнопки, это продвинуло бы мой проект.В конечном итоге я создаю сетку кнопок, которые при нажатии отображают текст и переключают целое число от +1 до -1.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Я изменил ваш код, дайте мне знать, если это вам поможет.

Я добавил функцию, которая будет возвращать идентификатор нажатой кнопки.

Функция:

# This Function will return Button id 
def button_id(id):
    print("Button {} is pressed".format(id))
    return id

Полный код:

from tkinter import Tk, Canvas, Frame, Grid, Button, N, S, E, W, mainloop
from functools import partial

root = Tk()
canvas = Canvas()
frame = Frame(root)

root.title("DJB")

root.minsize(300, 300)
root.resizable(False, False)

root.configure(bg='black')
# --------------------------------------------

Grid.rowconfigure(root, 3, weight=1)
Grid.columnconfigure(root, 3, weight=1)

frame=Frame(root)
frame.grid(row=3, column=3, sticky=N+S+E+W)

# This Function will return Button id 
def button_id(id):
    print("Button {} is pressed".format(id))
    return id

id = 1

for row_index in range(3):
    Grid.rowconfigure(frame, row_index, weight=1)
    for col_index in range(3):
        Grid.columnconfigure(frame, col_index, weight=1)
        btn = Button(frame, bg="white", command = partial(button_id, id=id)) #create a button inside frame
        btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)
        id += 1

mainloop()
0 голосов
/ 09 апреля 2019

Вы можете проверить текст кнопки по widget["text"]. Передайте это как команду для динамического получения значения:

from tkinter import Tk, Canvas, Frame, Grid, Button, N, S, E, W

root = Tk()
canvas = Canvas()
frame = Frame(root)

root.title("DJB")

root.minsize(300, 300)
root.resizable(False, False)

root.configure(bg='black')
# --------------------------------------------

Grid.rowconfigure(root, 3, weight=1)
Grid.columnconfigure(root, 3, weight=1)

frame.grid(row=3, column=3, sticky=N+S+E+W)

def get_value(widget):
    if widget["text"] == "" or widget["text"] == "X":
        widget["text"] = "O"
        #value = 1
    else:
        widget["text"] = "X"
        #value = -1

for row_index in range(3):
    Grid.rowconfigure(frame, row_index, weight=1)
    for col_index in range(3):
        Grid.columnconfigure(frame, col_index, weight=1)
        btn = Button(frame, bg="white",font="Arial 40 bold",width=3)
        btn.config(command=lambda x=btn: get_value(x))
        btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...