Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Tkinter在类中创建按钮_Python_Tkinter - Fatal编程技术网

Python 使用Tkinter在类中创建按钮

Python 使用Tkinter在类中创建按钮,python,tkinter,Python,Tkinter,我正在用python创建一个小的tkinter应用程序,需要创建大量的按钮,这些按钮都有属性,所以我决定在一个类中创建它们,然后创建该类的许多实例。然而,由于tkinter按钮已经是一个对象,我不太确定这两个类之间的组合将如何工作。但目前,当我创建类的实例时,按钮命令方法似乎不会在单击时运行该命令 下面是我创建按钮的模块,我将其导入我的tkinter主模块,并创建其实例。我想知道为什么按钮命令“selectSeat”在创建按钮时运行,为什么在单击按钮时不运行 from tkinter impor

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

下面是我创建按钮的模块,我将其导入我的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"
当command=self.selectSeat时,selectSeat功能将在初始化时直接执行

尝试只传递不带大括号的引用:

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

Tkinter随后将调用函数本身,有关更多示例,请参阅。

您直接在“command=self.selectSeat”中调用该方法。只需使用“command=self.selectSeat”听起来不错,谢谢,您如何在没有参数的情况下传入变量等?您是否尝试过扩展Tkinter按钮?类似于类searbuttonbutton而不是self.button属性。