在Tkin中随着时间的推移改变GUI

2024-10-02 14:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用{ython中的Tkinter构建一个康威的生活游戏图形。游戏逻辑和其他一切都很好,我只是停留在代码的最后一部分,即使在阅读了库之后也无法理解。在

self.after(1000,self.draw(bigThing))

以下是完整代码:

^{pr2}$

我稍微改变了一下结构。好像我想在runit方法下画的东西都不管用。我不知道为什么会这样。“runit”中的所有其他函数都能正常工作。只是这个没用:

^{3}$

这是我的按钮类:

##button.py
from Tkinter import *


class Buttons:

def __init__(self,canvas,bx,by,tx,ty, k, i,buttonlist):
    self.buttonlist = buttonlist
    self.canvas = canvas
    self.rec = canvas.create_rectangle((bx,by,tx,ty),fill = "lightgray",
                                       activefill= 'black', outline = 'lightgray')
    self.canvas.tag_bind(self.rec, "<Button-1>", lambda event: self.callback())
    self.active = False

    self.k = k
    self.i = i

    self.xmin = bx
    self.xmax = tx
    self.ymin = by
    self.ymax = ty
    ##print (bx, by, tx, ty)

def activate(self):
    self.canvas.itemconfigure(self.rec, fill = 'black')

def deactivate(self):
    self.canvas.itemconfig(self.rec, fill='lightgray')

def callback(self):
    self.activate()
    self.buttonlist[self.k][self.i] = 1

Tags: 代码self游戏bytkinterdeffillcanvas
1条回答
网友
1楼 · 发布于 2024-10-02 14:30:00

由于AppFrame.__init__没有调用Frame超结构,AppFrame对象不是正确的Tk对象。该方法中的代码似乎与应该调用它的代码组合在一起,并且在该方法中声明的Frameself.f)实际上应该是self

class AppFrame(Frame):
    def __init__(self, root, buttonlist):
        Frame.__init__(self, root, relief='sunken', width=600, height=600)
        self.root = root
        self.gameisrunning = False
        self.w = Canvas(self.f, width = 505, height =505)

        # [as before, but with self instead of self.f]

在特定于应用程序的框架之外构建root对象通常更模块化(这允许您将应用程序嵌入到根目录之外的其他位置):

^{pr2}$

相关问题 更多 >