Docking of Python console - contributed by Nathan Woodrow - with some improvements.

git-svn-id: http://svn.osgeo.org/qgis/trunk@14998 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
wonder 2011-01-05 23:26:18 +00:00
parent c4743a08af
commit 1fa7abb75e

View File

@ -24,6 +24,7 @@ TODO:
from PyQt4.QtCore import * from PyQt4.QtCore import *
from PyQt4.QtGui import * from PyQt4.QtGui import *
from qgis.utils import iface
import sys import sys
import traceback import traceback
import code import code
@ -31,24 +32,27 @@ import code
_init_commands = ["from qgis.core import *", "import qgis.utils"] _init_commands = ["from qgis.core import *", "import qgis.utils"]
_console = None _console = None
def show_console(): def show_console():
""" called from QGIS to open the console """ """ called from QGIS to open the console """
global _console global _console
if _console is None: if _console is None:
_console = PythonConsole() _console = PythonConsole(iface.mainWindow())
_console.show() _console.show() # force show even if it was restored as hidden
_console.raise_() else:
_console.setWindowState( _console.windowState() & ~Qt.WindowMinimized ) _console.setVisible(not _console.isVisible())
_console.activateWindow() # set focus to the edit box so the user can start typing
if _console.isVisible():
_console.activateWindow()
_console.edit.setFocus()
_old_stdout = sys.stdout _old_stdout = sys.stdout
_console_output = None _console_output = None
# hook for python console so all output will be redirected # hook for python console so all output will be redirected
# and then shown in console # and then shown in console
def console_displayhook(obj): def console_displayhook(obj):
@ -69,26 +73,26 @@ class QgisOutputCatcher:
sys.stdout = QgisOutputCatcher() sys.stdout = QgisOutputCatcher()
class PythonConsole(QDockWidget):
class PythonConsole(QWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
QWidget.__init__(self, parent) QDockWidget.__init__(self, parent)
self.setObjectName("Python Console")
self.setAllowedAreas(Qt.BottomDockWidgetArea)
self.widget = QWidget()
self.l = QVBoxLayout(self.widget)
self.edit = PythonEdit() self.edit = PythonEdit()
self.l = QVBoxLayout()
self.l.addWidget(self.edit) self.l.addWidget(self.edit)
self.setLayout(self.l) self.setWidget(self.widget)
self.setWindowTitle(QCoreApplication.translate("PythonConsole", "Python Console")) self.setWindowTitle(QCoreApplication.translate("PythonConsole", "Python Console"))
# try to restore position from stored main window state
s = QSettings() if not iface.mainWindow().restoreDockWidget(self):
self.restoreGeometry(s.value("/python/console/geometry").toByteArray()) iface.mainWindow().addDockWidget(Qt.BottomDockWidgetArea, self)
def sizeHint(self): def sizeHint(self):
return QSize(500,300) return QSize(500,300)
def closeEvent(self, event): def closeEvent(self, event):
s = QSettings()
s.setValue("/python/console/geometry", QVariant(self.saveGeometry()))
QWidget.closeEvent(self, event) QWidget.closeEvent(self, event)