Extended scene library
Project description
PyQtExtendedScene
PyQtExtendedScene is a little library for creating workspaces. Having described the method of drawing your components, with this library you get (draggable) workspace (scene) where the components you described can be selected, moved, deleted, etc. The scene itself can be increased, reduced, the work area may be moved.
In short, with this library you can create minimalistic (very minimalistic) similarities of such programs as AutoCAD, Labview, yEd, etc.
Repository: https://github.com/EPC-MSU/PyQtExtendedScene
Installation:
Installation is very simple:
pip install PyQtExtendedScene
Working example:
from PyQt5.QtWidgets import QGraphicsEllipseItem
from PyQt5.QtCore import QRectF, QPointF
from PyQt5.QtGui import QBrush, QColor
from PyQtExtendedScene import ExtendedScene, AbstractComponent
# Let's describe our own component
class MyComponent(AbstractComponent):
selected_size = 20
normal_size = 10
def __init__(self, x: float, y: float, descr: str = ""):
super().__init__(draggable=True, selectable=True, unique_selection=True)
self._r = self.normal_size
self.setPos(QPointF(x, y))
# We must describe how to draw our own component
# Our own component will be just a circle
self._item = QGraphicsEllipseItem(-self._r, -self._r, self._r * 2, self._r * 2, self)
# .. yellow circle
self._item.setBrush(QBrush(QColor(0xFFFF00)))
# Add description to our object - it will be used in "click" callback function
self._descr = descr
# We must override parent method "select" because our component changes shape when selected
def select(self, selected: bool = True):
# Radius of our circle changes when selected
self._r = self.selected_size if selected else self.normal_size
# redraw our object with new radius
self._item.setRect(QRectF(-self._r, -self._r, self._r * 2, self._r * 2))
@property
# That is our own property
def description(self):
return self._descr
if __name__ == '__main__':
import sys
from os.path import isfile
from PyQt5.QtWidgets import QFileDialog, QApplication
from PyQt5.QtGui import QPixmap
app = QApplication(sys.argv)
# Open workspace background image
path_to_image = "workspace.png"
if not isfile(path_to_image):
path_to_image = QFileDialog().getOpenFileName(caption="Open workspace image",
filter="Image Files (*.png *.jpg *.bmp *.tiff)")[0]
image = QPixmap(path_to_image)
image = image.scaled(800, 600)
# Create workspace!
widget = ExtendedScene(image)
# Let's add some components to our workspace
widget.add_component(MyComponent(10, 10, "My component 1"))
widget.add_component(MyComponent(100, 200, "My component 2"))
def left_click(component):
if isinstance(component, MyComponent):
print(f"Left click on '{component.description}'")
# Handle left click
widget.on_component_left_click.connect(left_click)
widget.show()
sys.exit(app.exec_())
Workspace example:
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
File details
Details for the file PyQtExtendedScene-1.0.6.tar.gz
.
File metadata
- Download URL: PyQtExtendedScene-1.0.6.tar.gz
- Upload date:
- Size: 4.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63e907aa4da1719d6d142a4eee8135f959f3b318988aaa2ccc81972f4bcd3101 |
|
MD5 | 1b1f6a618365eeda67b78509d70c9918 |
|
BLAKE2b-256 | 232b55a15802f8a608316a61fe361c55223d0ce3ebbb135552eb8b8ac2eeacb0 |
File details
Details for the file PyQtExtendedScene-1.0.6-py3-none-any.whl
.
File metadata
- Download URL: PyQtExtendedScene-1.0.6-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4cf36f28813a9fc55f2a91f0ae9f9eb291609a128d2d937a2dc4272a9ccb2758 |
|
MD5 | c656ca52c57b7fe54aa048623299ae18 |
|
BLAKE2b-256 | a0164baeede998a761481329aa9795aa41733dda0e898b28990ee1560aeaeedf |