私はgame.pyとmap.pyの2つのファイルを持っています。以下の単純化されたコードは、それらの中に存在する:Pythonの静的クラスC#/ Javaスタイル、スコープの違いのエラーを使用
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:
__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'
でgame.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")
問題は、マップ内のコードです。 pyは、Game.Viewを参照するクラスとして(クラス本体で定義されているように)クラスとして検出しますが、実際のインスタンスでは上書きされません。 はまた、ゲームは誰も私を助けてもらえmap.py
にgame.pyでメイン .Gameとしてではなくgame.Gameとして知られていますか?
問題は循環参照でした。依存関係のツリーを変更して解決しました – AbiusX