La mia risposta generale a questo sarebbe no, non è possibile in modo diretto. Il problema principale è che quando avvii la tua app, carica tutto in memoria e le tue classi hanno i loro metodi vincolati, ecc ... Quindi per aggiornare dire, i valori che hai cambiato di un metodo di una classe, dovresti distruggi quella classe (o widget) e ricrearla sotto la fonte aggiornata (che ucciderebbe anche i bambini).
Il suo male guardare, ma sarebbe simile a questa:
## main.py ##
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.resize(640,480)
self.central = widget.Widget()
self.setCentralWidget(self.central)
self.toolbar = QtGui.QToolBar()
self.toolbar.addAction("Reload Entire Widget", self._reloadWidget)
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolbar)
def _reloadWidget(self):
print "Reloading", widget
reload(widget)
self.central.deleteLater()
self.central = widget.Widget()
self.setCentralWidget(self.central)
## widget.py ##
class Widget(QtGui.QWidget):
def __init__(self, *args, **kwargs):
super(Widget, self).__init__(*args, **kwargs)
self.layout = QtGui.QVBoxLayout(self)
self.button = QtGui.QPushButton("Click")
self.layout.addWidget(self.button)
self.button.clicked.connect(self.testMethod)
def testMethod(self):
print "testmethod(): FOO"
Anche in questo caso, credo che questo approccio è problematico e difficile da affrontare, poiché è necessario distruggere e ricreare il widget di. Si verificano più problemi quando parti della tua app hanno dei segnali legati agli slot di questo widget in fase di aggiornamento. Dovrai quindi ricaricare i loro moduli e ricollegare i loro segnali. Diventa una grande struttura ad albero delle dipendenze. È abbastanza difficile da fare con lo script Python standard, figuriamoci provare a farlo con qualcosa di molto più persistente e dinamico come il framework PyQt.
Fondamentalmente, non fare affidamento su questa abilità. Forse stai meglio con lo setting up something with QTest per simulare le tue attività ripetitive.
Buona domanda. Ho chiesto qualcosa di simile, anche se molto più generale: http://stackoverflow.com/questions/9519384/editing-programs-while-they-are-running-how. – gdw2
Qualche tempo fa ho provato a utilizzare il modulo ['reimport'] (http://code.google.com/p/reimport/) scrivendo alcune soluzioni alternative per PySide http://pastebin.com/VN0JPDfC (PyQt dovrebbe lavoro anche). Ha funzionato, ma a volte solleva eccezioni imprevedibili. Sono d'accordo con @jdi, che il test è il modo migliore. – reclosedev