Есть ли возможность присвоить значение кнопке tkinter? - PullRequest
1 голос
/ 02 мая 2020

Я хочу сделать игру с боевым кораблем, где каждый игрок ставит свои разные лодки на поле 10 х 10. Чтобы узнать, где находятся лодки, я хочу изменить переменную с False на True, если кнопка была нажата. Также цвет кнопки должен измениться на черный, но если он уже черный, он снова должен измениться на серый, а переменная снова должна быть ложной. В моем коде я определил класс только для кнопок. мастер должен быть в кадре. Нужна команда 'put command', так как мне нужны эти кнопки для второго кадра с другой командой. bentuzung означает тот, кто его использует (в моем случае это 1 или 2). Поэтому я ищу способ присвоения переменной кнопке. Также код не должен быть слишком длинным.

from tkinter import *

class buttons():
    def __init__(self, master, benutzung):
        self.button_list = []
        for j in range(10):
            for m in range(10):
                btn = Button(master, text = "     ")
                btn.grid(row = j, column = m)
                self.button_list.append(btn)
        self.put_command(benutzung)
    def put_command(self, benutzung):
        if benutzung == 1:
            for x in self.button_list:
                x.configure(command = lambda bt = x: self.set_ship(bt))
    def set_ship(self, btn):
            btn.configure(bg = "black")

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Так что я сам нашел решение. Вы можете просто создать новый атрибут, например, 'num', и присвоить ему значение. Затем вы можете получить значение по 'btn.num'.

Код:

from tkinter import *

class buttons():
    def __init__(self, master, benutzung):
        self.button_list = []

        for j in range(10):
            for m in range(10):

                self.btn = Button(master, text = "     ", bg = "grey")
                self.btn.grid(row = j, column = m)
                self.btn.num = 1
                self.button_list.append(self.btn)
        self.put_command(benutzung)
    def put_command(self, benutzung):
        if benutzung == 1:
            for x in self.button_list:
                x.configure(command = lambda bt = x: self.set_ship(bt))
    def set_ship(self, btn):
        if btn.num == 1:
            btn.configure(bg = "black")
            btn.num = 0
        elif btn.num == 0:
            btn.configure(bg = "grey")
            btn.num = 1


0 голосов
/ 02 мая 2020

Вы можете использовать параметр textvariable с IntVar().

Итак, ваша кнопка будет:

num = IntVar()
b = Button(master, text = "str", textvariable = num)
b.pack()

Надеюсь, это поможет!

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