/usr/lib/python3/dist-packages/guidata/qtwidgets.py is in python3-guidata 1.7.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # -*- coding: utf-8 -*-
#
# Copyright © 2009-2011 CEA
# Pierre Raybaut
# Licensed under the terms of the CECILL License
# (see guidata/__init__.py for details)
"""
qtwidgets
---------
The ``guidata.qtwidgets`` module provides ready-to-use or generic widgets
for developing easily Qt-based graphical user interfaces.
"""
from math import cos, sin, pi
from guidata.qt import PYQT5
from guidata.qt.QtGui import QLabel, QPainter, QPen, QWidget, QDockWidget
from guidata.qt.QtCore import QSize, Qt
# Local imports:
from guidata.configtools import get_family
class RotatedLabel(QLabel):
"""
Rotated QLabel
(rich text is not supported)
Arguments:
* parent: parent widget
* angle=270 (int): rotation angle in degrees
* family (string): font family
* bold (bool): font weight
* italic (bool): font italic style
* color (QColor): font color
"""
def __init__(self, text, parent=None, angle=270,
family=None, bold=False, italic=False, color=None):
QLabel.__init__(self, text, parent)
font = self.font()
if family is not None:
font.setFamily(get_family(family))
font.setBold(bold)
font.setItalic(italic)
self.setFont(font)
self.color = color
self.angle = angle
self.setAlignment(Qt.AlignCenter)
def paintEvent(self, evt):
painter = QPainter(self)
if self.color is not None:
painter.setPen(QPen(self.color))
painter.rotate(self.angle)
transform = painter.transform().inverted()[0]
rct = transform.mapRect(self.rect())
painter.drawText(rct, self.alignment(), self.text())
def sizeHint(self):
hint = QLabel.sizeHint(self)
width, height = hint.width(), hint.height()
angle = self.angle*pi/180
rotated_width = abs(width*cos(angle))+abs(height*sin(angle))
rotated_height = abs(width*sin(angle))+abs(height*cos(angle))
return QSize(rotated_width, rotated_height)
def minimumSizeHint(self):
return self.sizeHint()
class DockableWidgetMixin(object):
ALLOWED_AREAS = Qt.AllDockWidgetAreas
LOCATION = Qt.TopDockWidgetArea
FEATURES = QDockWidget.DockWidgetClosable | \
QDockWidget.DockWidgetFloatable | \
QDockWidget.DockWidgetMovable
def __init__(self, parent):
self.parent_widget = parent
self._isvisible = False
self.dockwidget = None
self._allowed_areas = self.ALLOWED_AREAS
self._location = self.LOCATION
self._features = self.FEATURES
def setup_dockwidget(self, location=None, features=None,
allowed_areas=None):
assert self.dockwidget is None, "Dockwidget must be setup before calling 'create_dockwidget'"
if location is not None:
self._location = location
if features is not None:
self._features = features
if allowed_areas is not None:
self._allowed_areas = allowed_areas
def get_focus_widget(self):
pass
def create_dockwidget(self, title):
"""Add to parent QMainWindow as a dock widget"""
dock = QDockWidget(title, self.parent_widget)
dock.setObjectName(self.__class__.__name__+"_dw")
dock.setAllowedAreas(self._allowed_areas)
dock.setFeatures(self._features)
dock.setWidget(self)
dock.visibilityChanged.connect(self.visibility_changed)
self.dockwidget = dock
return (dock, self._location)
def is_visible(self):
return self._isvisible
def visibility_changed(self, enable):
"""DockWidget visibility has changed"""
if enable:
self.dockwidget.raise_()
widget = self.get_focus_widget()
if widget is not None:
widget.setFocus()
self._isvisible = enable and self.dockwidget.isVisible()
class DockableWidget(QWidget, DockableWidgetMixin):
def __init__(self, parent):
if PYQT5:
super(DockableWidget, self).__init__(parent, parent=parent)
else:
QWidget.__init__(self, parent)
DockableWidgetMixin.__init__(self, parent)
|