使用Tkinter在类中创建按钮

时间:2019-02-09 11:44:41

标签: python tkinter

我正在用python创建一个小的tkinter应用程序,并且需要创建大量具有属性的按钮,因此我决定在一个类中创建它们,然后创建该类的许多实例。但是,由于tkinter Button已经是一个对象,因此我不太确定两个类之间的组合如何工作。但是目前,当我创建类的实例时,buttons命令方法似乎没有问题,但是单击时将不会运行该命令。

下面是我创建按钮的模块,我将其导入到主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 :(得分:1)

使用command=self.selectSeat(),函数selectSeat将直接执行(初始化时)。

尝试仅传递参考(不带花括号):

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

然后,Tkinter将调用该函数本身,有关更多示例,请参见TKinter Callbacks