使用python静态类C#/Java样式时,范围差异错误

2024-09-28 16:22:14 发布

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

我有两个档案游戏.py以及地图.py. 其中包含以下简化代码:

from PyQt4.QtGui import *
from PyQt4.QtCore import *

from datetime import *

from map import *

class Game:

    Scene = QGraphicsScene
    View = QGraphicsView


    @staticmethod
    def start():
        Game.App = QApplication(sys.argv)       
        Game.Scene=QGraphicsScene();    

        Game.Scene.setBackgroundBrush(QBrush(QColor(Qt.green)));

        Game.View=QGraphicsView(Game.Scene);
        print Game
        map=Map()

        Game.App.exec_()

if __name__=='__main__':
    Game.start()

和文件地图.py公司名称:

^{pr2}$

跑步游戏.py结果

__main__.Game
game.Game
<class 'PyQt4.QtGui.QGraphicsView'>
Traceback (most recent call last):
  File "/home/abiusx/workspace/borj/trunk/game.py", line 119, in <module>
    Game.start()
  File "/home/abiusx/workspace/borj/trunk/game.py", line 66, in start
    map=Map()
  File "/home/abiusx/workspace/borj/trunk/map.py", line 16, in __init__
    v.setWindowTitle("asb")
TypeError: QWidget.setWindowTitle(QString): first argument of unbound method must have type 'QWidget'

问题是,代码地图.py引用游戏。查看,将其检测为类(在类主体中定义),但不检测覆盖在其上的内容(实际实例)。 游戏也被称为main游戏.py但是作为游戏。游戏在地图.py在

有人能帮我吗?在


Tags: frompyimportgame游戏maphomemain
2条回答

每当在Python中读取一个文件时,当它到达一个类定义时,它就会定义该类。在

在我的场景中,游戏和地图都是相互依赖的。这是python中一个众所周知的循环引用问题。 我又加了一个模块,主.py,在其中使用了游戏和地图,在地图中使用了游戏。问题解决了。在

the code in map.py that references Game.View, detects it as a class

这是因为View = QGraphicsView将其设置为一个类。它只在您运行Game.start时成为一个实例。(老实说,我不明白最初为什么要将这个类变量设置为class对象,或者为什么Game类存在。)

Also Game is known as main.Game in game.py but as game.Game in map.py

当您将模块作为脚本运行时,模块名称将更改为__main__。在

相关问题 更多 >