0

我有两个文件,分别是game.py 和map.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()

和文件map.py:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from game import *
class Map(QObject):
    def __init__(self,parent=None):
        super(Map,self).__init__(parent);
        print Game
        v=Game.View
        print v
        v.setWindowTitle("sth")

运行 game.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'

问题是,map.py 中引用 Game.View 的代码将其检测为一个类(如在类主体中定义的那样),而不是被覆盖的内容(实际实例)。Game 在 game.py 中也称为main .Game 但在 map.py 中称为 game.Game

有人可以帮我吗?

4

2 回答 2

1

map.py 中引用 Game.View 的代码,将其检测为一个类

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

Game 在 game.py 中也称为 main.Game,但在 map.py 中称为 game.Game

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

于 2012-04-26T13:19:13.053 回答
0

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

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

于 2012-05-05T15:45:41.420 回答