Создание кнопок внутри класса с помощью Tkinter - PullRequest
0 голосов
/ 09 февраля 2019

Я создаю небольшое приложение tkinter в python, и мне нужно создать большое количество кнопок, которые имеют атрибуты, поэтому я решил создать их в классе, а затем создать множество экземпляров класса.Однако, поскольку кнопка tkinter уже является объектом, я не слишком уверен, как будет работать композиция между двумя классами.Но в настоящее время, когда я создаю экземпляр своего класса, он выглядит как метод команды button, однако не будет запускать команду при нажатии.

Ниже представлен мой модуль для создания кнопок, которые я импортирую в свой основной модуль tkinter, и создания экземпляров.Мне было интересно, почему команда кнопки 'selectSeat' запускается при создании кнопок и почему она не запускается при нажатии кнопок.

from tkinter import *
class SeatButton():
    def __init__(self, master, row, seat):
    ''' Initalises a seating button '''
    self.colour = "green"
    self.state = "free"
    self.row = row
    self.seat = seat
    self.button = Button(master,bg=self.colour, command=self.selectSeat(), padx=10)


def update(self):
    ''' Updates the button's colour '''
    print("i shouldnt run")
    if self.state == "free":
        self.colour = "green"
    if self.state == "selected":
        self.colour = "blue"

def selectSeat(self):
    ''' Calculates what happens when a button is clicked'''
    # If the seat is avaliable, it is now selected
    print("hwey")
    if self.state == "free":
        self.state = "selected"
        self.colour = "blue"
    elif self.state == "selected":
        self.state == "free"
        self.colour = "green"

1 Ответ

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

При command=self.selectSeat() функция selectSeat будет выполняться напрямую (при инициализации).

Попробуйте передать только ссылку (без фигурных скобок):

self.button = Button(master, bg=self.colour, command=self.selectSeat, padx=10)
                                                                   ^^

Тогда Tkinter будетвызовите саму функцию, см. Обратные вызовы TKinter для получения дополнительных примеров.

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