为了账号安全,请及时绑定邮箱和手机立即绑定

再次单击时如何将按钮颜色更改回原始颜色

再次单击时如何将按钮颜色更改回原始颜色

至尊宝的传说 2022-01-05 10:50:13
我试图在单击时将按钮颜色更改为黑色,然后在再次单击时将其改回白色。我正在尝试为学校项目制作 Game Of Life。我试过 if 语句,但它不会变回白色,也许我错过了一些简单的东西。这是代码:from tkinter import *class GUI(Frame):   def __init__(self, master=None):        Frame.__init__(self, master)        master.title("Window") #Window title        self.pack()        master.geometry("1280x720") #Window size        self.button={}#Dictionary for buttons        self.create_button()    def create_button(self):        indexList =[i for i in range(1000)]        self._button = Button(self, bg='white')        print(self._button.cget('bg'))        xPos = 0        yPos = 0        for index in indexList:            if(yPos == 40):                xPos = xPos + 20                yPos = 0            if(xPos == 10):                yPos = 8            self._button = Button(self, height=2, width=4, command = lambda             i = index: self.changecolour(i))            self.button[index] = self._button            self._button.grid(row=xPos, column =yPos)            yPos = yPos + 1    def changecolour(self,index):        aList = []        for i in range(1000):            aList.append([i,0])        for i in aList:            if index == i[0]:                if 0 == i[1]:                     self.button[index].configure(bg = 'black')                    i[1] = 1                else:                    self.button[index].configure(bg = 'white')                    i[1] = 0root = Tk()game_gui = GUI(master=root)game_gui.mainloop()如您所见,它将按钮颜色更改为黑色,再次单击时应将其更改回白色,但它似乎只是忽略了 if 语句。
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

我认为这是问题所在:


aList 不是全局列表


aListchangecolour()每次运行子程序时都作为本地列表创建


这意味着当你这样做i[1] = 1或i[1] = 0它只改变本地列表时 aList。当子程序再次运行时,aList会创建一个新的作为新的本地列表。


解决aList主程序中定义的问题并使其成为全局列表:


from tkinter import *


class GUI(Frame):

   def __init__(self, master=None):


        Frame.__init__(self, master)

        master.title("Window") #Window title

        self.pack()


        master.geometry("1280x720") #Window size


        self.button={}#Dictionary for buttons


        self.create_button()


    def create_button(self):

        indexList =[i for i in range(1000)]

        self._button = Button(self, bg='white')

        print(self._button.cget('bg'))


        xPos = 0

        yPos = 0

        for index in indexList:

            if(yPos == 40):

                xPos = xPos + 20

                yPos = 0

            if(xPos == 10):

                yPos = 8


            self._button = Button(self, height=2, width=4, command = lambda 

            i = index: self.changecolour(i))

            self.button[index] = self._button

            self._button.grid(row=xPos, column =yPos)

            yPos = yPos + 1



    def changecolour(self,index):

        #aList IS NO LONGER CREATED HERE


        for i in range(1000):

            aList.append([i,0])


        for i in aList:

            if index == i[0]:

                if 0 == i[1]: 

                    self.button[index].configure(bg = 'black')

                    i[1] = 1

                else:

                    self.button[index].configure(bg = 'white')

                    i[1] = 0


global aList #MAKE IT A GLOBAL LIST

aList = [] #CREATE THE EMPTY aList LIST

root = Tk() 

game_gui = GUI(master=root)

game_gui.mainloop()


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信