我正在用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"
答案 0 :(得分:1)
使用command=self.selectSeat()
,函数selectSeat
将直接执行(初始化时)。
尝试仅传递参考(不带花括号):
self.button = Button(master, bg=self.colour, command=self.selectSeat, padx=10)
^^
然后,Tkinter将调用该函数本身,有关更多示例,请参见TKinter Callbacks。