Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import sys
- import weakref
- from PySide import QtGui
- class InnerPresenter:
- def __init__(self, view):
- self._view = weakref.ref(view)
- self.logger = logging.getLogger('InnerPresenter')
- self.logger.debug('Initializing InnerPresenter (id:%s)' % id(self))
- def __del__(self):
- self.logger.debug('Deleting InnerPresenter (id:%s)' % id(self))
- @property
- def view(self):
- return self._view()
- def on_alert(self):
- self.view.show_alert()
- def on_raise_exception(self):
- raise Exception('From InnerPresenter (id:%s)' % id(self))
- class OuterView(QtGui.QMainWindow):
- def __init__(self, *args, **kwargs):
- super(OuterView, self).__init__(*args, **kwargs)
- self.logger = logging.getLogger('OuterView')
- # Menus
- menu_bar = self.menuBar()
- test_menu = menu_bar.addMenu('&Test')
- self.open_action = QtGui.QAction('&Open inner', self, triggered=self.on_open, enabled=True)
- test_menu.addAction(self.open_action)
- self.close_action = QtGui.QAction('&Close inner', self, triggered=self.on_close, enabled=False)
- test_menu.addAction(self.close_action)
- def closeEvent(self, event, *args, **kwargs):
- self.logger.debug('Exiting application')
- event.accept()
- def on_open(self):
- self.setCentralWidget(InnerView(self))
- self.open_action.setEnabled(False)
- self.close_action.setEnabled(True)
- def on_close(self):
- self.setCentralWidget(None)
- self.open_action.setEnabled(True)
- self.close_action.setEnabled(False)
- class InnerView(QtGui.QWidget):
- def __init__(self, *args, **kwargs):
- super(InnerView, self).__init__(*args, **kwargs)
- self.logger = logging.getLogger('InnerView')
- self.logger.debug('Initializing InnerView (id:%s)' % id(self))
- self.presenter = InnerPresenter(self)
- # Layout
- layout = QtGui.QHBoxLayout(self)
- alert_button = QtGui.QPushButton('Alert!', self, clicked=self.presenter.on_alert)
- layout.addWidget(alert_button)
- raise_button = QtGui.QPushButton('Raise exception!', self, clicked=self.presenter.on_raise_exception)
- layout.addWidget(raise_button)
- self.setLayout(layout)
- def __del__(self):
- self.logger.debug('Deleting InnerView (id:%s)' % id(self))
- def show_alert(self):
- QtGui.QMessageBox(text='Here is an alert').exec_()
- if __name__ == '__main__':
- logging.basicConfig(level=logging.DEBUG)
- app = QtGui.QApplication(sys.argv)
- view = OuterView()
- view.show()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement