Под «редактированием программ panda3d на лету» вы имеете в виду изменение вещей для проверки работающей программы?Или действительно вносить постоянные изменения в структуру вашей программы в интерактивной среде?
Просто перешагнуть цикл в интерактивном сеансе Python довольно легко.Вы можете просто заменить while 1:
объявлением метода, таким как def step(self):
, а затем вызывать его для каждого шага.
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from direct.showbase.ShowBase import ShowBase
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.qtApp = QApplication(sys.argv)
label = QLabel("Hello World")
label.show()
self.m = loader.loadModel("frowney")
self.m.reparentTo(render)
def step(self):
self.qtApp.processEvents() #manual step trough Qt loop
taskMgr.step() #manual step trough Panda3D loop
return 0 #PyOS_InputHook expects an integer
if __name__ == "__main__":
app = MyApp()
while 1: app.step()
С if __name__ == "__main__"
для основного цикла, ваш файл все равно будет работать как следуеткогда запустить автономно.Но теперь вы можете импортировать его в интерактивный сеанс и изменять вещи между шагами.
>>> import myfile
>>> app = myfile.MyApp()
>>> app.step()
>>> app.something = something_else
>>> app.step()
Теперь, чтобы добавить его в цикл событий IPython, чтобы он запускался при использовании интерпретатора, вы можете использовать IPython.lib.inputhook.set_inputhook()
(новое в IPython 0.11).
>>> from IPython.lib import inputhook
>>> inputhook.set_inputhook(app.step)
Это должно привести к тому, что ваша программа будет работать, пока интерпретатор бездействует, но все же разрешает манипуляции как обычно.