0

我有一个问题,虽然我不确定使用什么语言。我对如何在不使用全局变量的情况下从其他模块访问主驱动程序模块中定义的画布有点困惑。例如,我在 driver.py 中实例化了画布,但我试图从 Level.py 中绘制。就上下文而言,它最终将读取文本文件并根据从中提取的数据绘制地图,用于 RPG 游戏。这是我的代码:

驱动程序.py:

import tkinter
import Level


HEIGHT = 1024
WIDTH = 800
TILE_SIZE = 32
VERTICAL_TILES = HEIGHT//TILE_SIZE
HORIZONTAL_TILES = WIDTH//TILE_SIZE

root = tkinter.Tk()
root.title("RPG Land")
window = tkinter.Canvas(root,width= WIDTH, height=HEIGHT )


lev = Level.LevelMgr()
lev.loadLevel()
lev.drawLevel()

window.pack()

root.mainloop()

Annnd Level.py:

import tkinter
from driver import window

class LevelMgr:
    def __init__(self):
        self.levelData = []
        self.visibleLevel = []
        self.tileColors = {
                            0 : 'empty',
                            1 : 'wall',
                            2 : 'bush' }

    def loadLevel(self):
        fyle = open('levels/level1','r')
        count = 0
        for lyne in fyle:
            self.levelData.append(lyne)
            count += 1


    def drawLevel(self):
        currentY = 0
        currentX = 0
        for col in self.levelData:
            currentY += 32
            for t in col:
                window.create_rectangle(currentX, currentY, 32, 32, fill="blue")
                currentX += 32

任何有关如何更好地构建程序的建议也将不胜感激。访问其他命名空间时,这样做的正确方法是什么?我是否需要在 driver.py 上具有“导入级别”以及在 Level.py 中具有“导入驱动程序”?我对这样一个程序的基本结构有点困惑。

4

1 回答 1

1

LevelMgr取决于窗口,因此将其明确命名为__init__

class LevelMgr:
    def __init__(self, window):
        self.window = window
    def drawLevel(self):
        ...
            for t in col:
                self.window.create_rectangle(currentX, currentY, 32, 32, fill="blue")

删除导入语句:

from driver import window

然后,在 Driver.py 中:

lev = Level.LevelMgr(window)

另一种可能性是简单地window在 Level.py 中定义而不是Driver.py.

于 2013-04-04T04:13:38.087 回答