Light weight python interpreter, easy to embed into Qt applications
Project description
pyqtconsole is a lightweight python console for Qt applications. It’s made to be easy to embed in other Qt applications and comes with some examples that show how this can be done. The interpreter can run in a separate thread, in the UI main thread or in a gevent task.
Installing
Simply type:
pip install pyqtconsole
Or to install a development version from local checkout, type:
pip install -e .
Simple usage
The following snippet shows how to create a console that will execute user input in a separate thread. Be aware that long running tasks will still block the main thread due to the GIL. See the examples directory for more examples.
import sys
from threading import Thread
from PyQt5.QtWidgets import QApplication
from pyqtconsole.console import PythonConsole
app = QApplication([])
console = PythonConsole()
console.show()
console.eval_in_thread()
sys.exit(app.exec_())
Embedding
Separate thread - Runs the interpreter in a separate thread, see the example threaded.py. Running the interpreter in a separate thread obviously limits the interaction with the Qt application. The parts of Qt that needs to be called from the main thread will not work properly, but is excellent way for having a ‘plain’ python console in your Qt app.
main thread - Runs the interpreter in the main thread, see the example inuithread.py. Makes full interaction with Qt possible, lenghty operations will of course freeze the UI (as any lenghty operation that is called from the main thread). This is a great alternative for people who does not want to use the gevent based approach but still wants full interactivity with Qt.
gevent - Runs the interpreter in a gevent task, see the example _gevent.py. Allows for full interactivity with Qt without special consideration (at least to some extent) for longer running processes. The best method if you want to use pyQtgraph, Matplotlib, PyMca or similar.
Customizing syntax highlighting
The coloring of the syntax highlighting can be customized by passing a formats dictionary to the PythonConsole constructer. This dictionary must be shaped as follows:
import pyqtconsole.highlighter as hl
console = PythonConsole(formats={
'keyword': hl.format('blue', 'bold'),
'operator': hl.format('red'),
'brace': hl.format('darkGray'),
'defclass': hl.format('black', 'bold'),
'string': hl.format('magenta'),
'string2': hl.format('darkMagenta'),
'comment': hl.format('darkGreen', 'italic'),
'self': hl.format('black', 'italic'),
'numbers': hl.format('brown'),
'inprompt': hl.format('darkBlue', 'bold'),
'outprompt': hl.format('darkRed', 'bold'),
})
All keys are optional and default to the value shown above if left unspecified.
Credits
The .qt sub module was taken from the pyQode. And provides Qt4 and Qt5 compatibility, the console is tested under both Qt4 and Qt5. The .qt sub module is included for easy distribution and to provide working examples for both versions 4 and 5 of Qt.
Changelog
v1.1.5
Date: 25.11.2019
fix TypeError in highlighter when called without formats
v1.1.4
Date: 21.11.2019
fix AttributeError due to QueuedConnection on PyQt<5.11 (#23)
fix exception on import when started within spyder (#26)
fix gevent example to incorporate interoperability code for gevent/Qt (#28)
fix not waiting for empty line when entering code blocks before applying input (#30)
fix TypeError during compilation step on python 3.8
allow user to override syntax highlighting color preferences (#29) note that this is provisional API
automate release process (#34)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pyqtconsole-1.1.5-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 52a563fa150d5984638834aeea46c6daf25ae35383b3ff4d7c9b40a6686cd5f2 |
|
MD5 | 2e7659f065a81c2e8ab1d751bdec45e6 |
|
BLAKE2b-256 | ee8b80f5420b42091da4607a1d136e0e996b97bc87780ca79c91741494a6b484 |