Beispiel #1
0
 def updateRect(self):
     fm = QFontMetrics(self._font)
     self._useRect = fm.size(Qt.TextExpandTabs, self.simpleUse())
     self._nameRect = fm.size(Qt.TextExpandTabs, self.simpleName())
     self._rect = QRect(
         0, 0,
         self._useRect.width() + self._nameRect.width() + 23,
         max(self._useRect.height(), self._nameRect.height()) + 4)
     x = self._useRect.width() + self._nameRect.width() + 12
     y = self._rect.center().y() - 3
     self._closeRect = QRect(x, y, 6, 6)
    def __init__(self, parent=None, name=None, modal=False, fl=Qt.Widget):
        QDialog.__init__(self, parent, fl)
        Ui_B_CraftWindow.setupUi(self, self)

        if name:
            self.setObjectName(name)

        if modal:
            self.setModal(modal)

        self.gems = []
        self.GemName = []
        self.GemCost = []
        self.GemMakes = []

        for i in range(0, 4):
            idx = i + 1
            self.GemName.append(getattr(self, 'Gem%dName' % idx))
            self.GemCost.append(getattr(self, 'Gem%dCost' % idx))
            self.GemMakes.append(getattr(self, 'Gem%dMakes' % idx))
            self.GemMakes[i].setSpecialValueText(" ")
            self.GemMakes[i].valueChanged[int].connect(self.RemakeChanged)

        self.Close.clicked.connect(self.CloseWindow)
        self.parent = parent
        testfont = QFontMetrics(QApplication.font())
        width = testfont.size(Qt.TextSingleLine, "  199g 00s 00c").width()
        self.gridlayout.setColumnMinimumWidth(2, width)
Beispiel #3
0
    def paintEvent(self, e):
        p = QPainter(self)

        for a in self.arcs:
            a.PaintArc(p)

        p.setPen(QPen(QColor(0, 115, 119)))

        rectW = self.width() * 0.45
        rectX = self.width() * 0.275
        rect = QRect(rectX, rectX, rectW, rectW / 2)
        font = QFont("Tahoma")
        font.setBold(True)
        font.setPixelSize(50)
        fontM = QFontMetrics(font)
        fontSize = fontM.size(0, "Recovery").width() + 20
        font.setPixelSize(50 * (rectW / fontSize))
        p.setFont(font)
        p.drawText(rect, Qt.AlignHCenter | Qt.AlignBottom, self.arcs[0].id)

        rect = QRect(rectX, rectX + rectW / 2, rectW, rectW / 2)
        font.setBold(False)
        p.setFont(font)
        p.drawText(rect, Qt.AlignHCenter | Qt.AlignTop,
                   "{:.1f}%".format(self.arcs[0].v * 100))
Beispiel #4
0
def get_text_size(text, painter=None):
    if not painter:
        metrics = QFontMetrics(QFont())
    else:
        metrics = painter.fontMetrics()
    size = metrics.size(Qt.TextSingleLine, text)
    return size
Beispiel #5
0
    def __init__(self, text, parent):
        super(DragLabel, self).__init__(parent)

        metric = QFontMetrics(self.font())
        size = metric.size(Qt.TextSingleLine, text)

        image = QImage(size.width() + 12, size.height() + 12, QImage.Format_ARGB32_Premultiplied)
        image.fill(qRgba(0, 0, 0, 0))

        font = QFont()
        font.setStyleStrategy(QFont.ForceOutline)

        painter = QPainter()
        painter.begin(image)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setBrush(Qt.white)
        painter.drawRoundedRect(QRectF(0.5, 0.5, image.width() - 1, image.height() - 1), 25, 25, Qt.RelativeSize)

        painter.setFont(font)
        painter.setBrush(Qt.black)
        painter.drawText(QRect(QPoint(6, 6), size), Qt.AlignCenter, text)
        painter.end()

        self.setPixmap(QPixmap.fromImage(image))
        self.labelText = text
Beispiel #6
0
    def __init__(self, category, nameClass, parent=None):
        super(seeCode, self).__init__(parent)

        imp = importlib.import_module('NodeEditor.modules.' + category)
        importlib.reload(imp)

        src = category + ' , ' + nameClass

        for name, obj in inspect.getmembers(imp):
            if inspect.isclass(obj):
                if name == nameClass:
                    try:
                        src = inspect.getcomments(obj) + '\n'
                        src += inspect.getsource(obj)
                    except Exception as e:
                        src = inspect.getsource(obj)
                    break

        self.setWindowTitle('Source code of ' + nameClass)
        layout = QVBoxLayout()
        txt = QTextEdit()
        txt.setReadOnly(True)
        txt.setPlainText(src)
        PythonHighlighter(txt)
        font = txt.document().defaultFont()
        fontMetrics = QFontMetrics(font)
        textSize = fontMetrics.size(0, txt.toPlainText())
        w = textSize.width() + 10
        h = 250
        txt.setMinimumSize(w, h)
        txt.resize(w, h)

        layout.addWidget(txt)
        self.setLayout(layout)
        self.setMinimumWidth(w + 50)
Beispiel #7
0
    def __init__(self, text, parent):
        super(DragLabel, self).__init__(parent)

        metric = QFontMetrics(self.font())
        size = metric.size(Qt.TextSingleLine, text)

        image = QImage(size.width() + 12,
                       size.height() + 12, QImage.Format_ARGB32_Premultiplied)
        image.fill(qRgba(0, 0, 0, 0))

        font = QFont()
        font.setStyleStrategy(QFont.ForceOutline)

        painter = QPainter()
        painter.begin(image)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setBrush(Qt.white)
        painter.drawRoundedRect(
            QRectF(0.5, 0.5,
                   image.width() - 1,
                   image.height() - 1), 25, 25, Qt.RelativeSize)

        painter.setFont(font)
        painter.setBrush(Qt.black)
        painter.drawText(QRect(QPoint(6, 6), size), Qt.AlignCenter, text)
        painter.end()

        self.setPixmap(QPixmap.fromImage(image))
        self.labelText = text
Beispiel #8
0
 def set_size(self):
     # Adjust window size to text (if possible)
     # These values were chosen in Windows 7
     self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
     font_metrics = QFontMetrics(self.font)
     max_width = min(QDesktopWidget().availableGeometry(self).width(), QDesktopWidget().screenGeometry(self).width())
     max_height = min(QDesktopWidget().availableGeometry(self).height(), QDesktopWidget().screenGeometry(self).height())
     width = max(400, min(max_width-16, self.txt.document().idealWidth() + 42+10))
     height = max(400, min(max_height-38, font_metrics.size(0, self._doc).height() + 145))
     self.resize(width, height)
Beispiel #9
0
    def __init__(self):
        QObject.__init__(self)

        self._rowHeight = 32
        self._mainFont = QFont('Hack')
        self._mainFont.setPixelSize(16)

        # updateFontSize
        fm = QFontMetrics(self._mainFont)
        self._hexLetter = fm.size(0, ' ')
Beispiel #10
0
    def upload_config_file(self):
        self.file_name, _ = QFileDialog.getOpenFileName(caption='Select File', directory=os.getcwd(),
                                                        filter='Config files (*.yaml *.yml)')

        self.showpath_lineEdit.setText(self.file_name)
        fontMetrics = QFontMetrics(QtGui.QFont())
        textSize = fontMetrics.size(0, self.file_name)
        textWidth = textSize.width() + 30
        textHeight = textSize.height() + 30
        self.showpath_lineEdit.resize(textWidth, textHeight)
Beispiel #11
0
 def adjust(self):
     font = self.document().defaultFont()
     fontMetrics = QFontMetrics(font)
     text = self.toPlainText()
     paragraphs = 0
     for line in text.split('\n'):
         paragraphs += (fontMetrics.size(0, line).width() +
                        30) // self.width() + 1
     textWidth = self.width()
     textHeight = max(1, paragraphs) * 20 + 10
     self.setMaximumSize(textWidth, textHeight)
Beispiel #12
0
    def _positions(self, option, qidx):
        fm = QFontMetrics(option.font)

        txt = u'%s' % qidx.data()
        if not txt.startswith('['):
            return

        tags = literal_eval(txt)
        for tag in tags:
            sz = fm.size(Qt.TextSingleLine, tag)
            yield sz, tag
Beispiel #13
0
    def measure_text(self, font, text):
        qfont = QFont(font.family)
        qfont.setPixelSize(font.size)
        qfont.setBold(FontStyle.bold in font.style)
        qfont.setItalic(FontStyle.italic in font.style)
        qfont.setStrikeOut(FontStyle.strike in font.style)
        qfont.setUnderline(FontStyle.underline in font.style)

        metrics = QFontMetrics(qfont)
        size = metrics.size(0, text)
        return Size(size.width(), size.height())
 def box(text, tool_tip):
     w = QLineEdit(self)
     w.setReadOnly(True)
     w.setFont(get_monospace_font())
     w.setText(str(text))
     w.setToolTip(tool_tip)
     fm = QFontMetrics(w.font())
     magic_number = 10
     text_size = fm.size(0, w.text())
     w.setMinimumWidth(text_size.width() + magic_number)
     return w
Beispiel #15
0
    def _positions(self, option, qidx):
        fm = QFontMetrics(option.font)

        txt = u'%s' % qidx.data()
        if not txt.startswith('['):
            return

        tags = literal_eval(txt)
        for tag in tags:
            sz = fm.size(Qt.TextSingleLine, tag)
            yield sz, tag
Beispiel #16
0
 def cellSize(self, leafIndex: QModelIndex, hv: QHeaderView,
              styleOptions: QStyleOptionHeader) -> QSize:
     res = QSize()
     variant = leafIndex.data(Qt.SizeHintRole)
     if variant:
         res = variant
     fnt = QFont(hv.font())
     var = leafIndex.data(Qt.FontRole)
     if var:
         fnt = var
     fnt.setBold(True)
     fm = QFontMetrics(fnt)
     size = QSize(
         fm.size(0, leafIndex.data(Qt.DisplayRole)) +
         QSize(4, 0))  # WA: add more horizontal size (4px)
     if leafIndex.data(Qt.UserRole):
         size.transpose()
     decorationsSize = QSize(hv.style().sizeFromContents(
         QStyle.CT_HeaderSection, styleOptions, QSize(), hv))
     emptyTextSize = QSize(fm.size(0, ""))
     return res.expandedTo(size + decorationsSize - emptyTextSize)
Beispiel #17
0
    def __init__(self, text):
        super().__init__()
        self.append(text)
        self.setReadOnly(True)

        self.setLineWrapMode(True)
        font = self.document().defaultFont()
        fontMetrics = QFontMetrics(font)
        textSize = fontMetrics.size(0, text)

        self.textHeight = textSize.height() + 15

        self.setFixedHeight(self.textHeight)
Beispiel #18
0
    def sizeHint(self, option, qidx):
        tags = qidx.sibling(qidx.row(), 0).data(qidx.model().ThreadTagsRole)

        fm = QFontMetrics(option.font)

        x = self.xmargin
        y = 0
        for sz, tag in self._positions(option, tags):
            x += sz.width() + self.xmargin + 2 * self.xpadding
            y = self.ymargin * 2 + fm.height()

        x += fm.size(Qt.TextSingleLine, qidx.data()).width()

        return QSize(x, y)
Beispiel #19
0
    def __init__(self, text):
        super().__init__()
        self.append(text)
        self.setReadOnly(True)

        self.setLineWrapMode(True)
        font = self.document().defaultFont()
        fontMetrics = QFontMetrics(font)
        textSize = fontMetrics.size(0, text)

        self.textHeight = textSize.height() + 50

        self.setFixedHeight(self.textHeight)
        self.setStyleSheet(
            'QWidget {border-bottom: 22px solid #333333;padding: 3;}')
Beispiel #20
0
    def size_changed(self):
        font = self.document().defaultFont()
        fontMetrics = QFontMetrics(font)
        textSize = fontMetrics.size(0, self.toPlainText())

        w = textSize.width() + 10
        row_count = 1
        while w > self._max_width:
            row_count += 1
            w -= self._max_width

        h = (textSize.height() + 4) * row_count + 4

        self.setMinimumSize(w, h)
        self.setMaximumSize(self._max_width, h)
        self.resize(self._max_width, h)

        self.contentsMargins().setLeft(10)
        self.contentsMargins().setRight(10)
Beispiel #21
0
    def __init__(self, text, parent):
        QLabel.__init__(self, parent=parent)

        font = QFont()

        metric = QFontMetrics(font)
        size = metric.size(Qt.TextSingleLine, text)

        image = QImage(size.width() + 12,
                       size.height() + 12, QImage.Format_ARGB32_Premultiplied)
        image.fill(QColor(0, 0, 0, 0))

        font.setStyleStrategy(QFont.ForceOutline)

        gradient = QLinearGradient(0, 0, 0, image.height() - 1)
        gradient.setColorAt(0.0, Qt.white)
        gradient.setColorAt(0.2, QColor(200, 200, 255))
        gradient.setColorAt(0.8, QColor(200, 200, 255))
        gradient.setColorAt(1.0, QColor(127, 127, 200))

        painter = QPainter()
        painter.begin(image)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setBrush(gradient)
        painter.drawRoundedRect(
            QRectF(0.5, 0.5,
                   image.width() - 1,
                   image.height() - 1), 25, 25, Qt.RelativeSize)
        painter.setFont(font)
        painter.setBrush(Qt.black)
        painter.drawText(QRect(QPoint(6, 6), size),
                         Qt.AlignCenter | Qt.AlignVCenter, text)
        painter.end()

        self.setPixmap(QPixmap.fromImage(image))

        self._label_text = text
Beispiel #22
0
    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setRenderHint(QPainter.Antialiasing, True)
        painter.setFont(self.__font)
        painter.setPen(self.__pen_line)
        metrics = QFontMetrics(self.__font)
        # text_height = metrics.height()
        text_width = max(
            metrics.size(Qt.TextExpandTabs, name).width()
            for name in self.__names) * 1.2
        self.__item_width = self.width() / float(len(self.__names))
        # self.__item_height = 2.5 * text_height
        self.__item_height = self.frameGeometry().height(
        )  # modified to auto-fit height from layout

        for i, name in enumerate(self.__names):
            if self.__availables[i]:
                color = self.__color_unselected
            else:
                color = self.__color_notavailable
            if i == 0:
                if len(self.__names) == 1:
                    self.__paintOnlyOne(painter, color)
                else:
                    self.__paintStart(painter, color)
            elif i == len(self.__names) - 1:
                self.__paintStop(painter, self.__item_width * i, color)
            else:
                self.__paintMiddle(painter, self.__item_width * i, color)

        if self.__selected is not None:
            if self.__mode == 'stop':
                pos_x = self.__selected * self.__item_width
                if self.__selected == 0:
                    if len(self.__names) == 1:
                        self.__paintOnlyOne(painter, self.__color_selected)
                    else:
                        self.__paintStart(painter, self.__color_selected)
                elif self.__selected == len(self.__names) - 1:
                    self.__paintStop(painter,
                                     self.__item_width * self.__selected,
                                     self.__color_selected)
                else:
                    self.__paintMiddle(painter,
                                       self.__item_width * self.__selected,
                                       self.__color_selected)
            else:
                self.__paintMiddle(painter, self.__pos, self.__color_selected)

        painter.setPen(self.__pen_text)
        for i, name in enumerate(self.__names):
            if i == self.__selected:
                painter.setPen(self.__textColor_selected)
            else:
                painter.setPen(self.__textColor_unselected)
            painter.drawText(
                QRect(self.__item_width * i, 0, self.__item_width,
                      self.__item_height), Qt.AlignCenter, name)
        painter.end()

        self.setMinimumHeight(self.__item_height)
        self.setMinimumWidth(text_width * len(self.__names))
Beispiel #23
0
    def __init__(self, *args, **kwargs):
        super(KwWorkFontDialog, self).__init__(*args, **kwargs)

        #fontIds = []
        #for font_fname in free_font_path_generator():
        #    fontIds = QFontDatabase.addApplicationFont(font_fname)
        #QFontDatabase.removeAllApplicationFonts()

        fontFreeFilterChecker = QCheckBox(u'Вільні')
        fontNoFreeFilterChecker = QCheckBox(u'Невільні')

        fontRating5FilterChecker = QCheckBox(u'Найкращі')
        fontRating4FilterChecker = QCheckBox(u'Добрі')
        fontRating3FilterChecker = QCheckBox(u'Задовільні')

        fontUseStrict_FilterChecker = QCheckBox(u'Діловодство, наука')
        fontUseWriting_FilterChecker = QCheckBox(u'Рукопис')
        fontUseFantasy_FilterChecker = QCheckBox(u'Декорації, реклама')

        fontFamilyListView = QListView()
        fontFamilyListView.setMinimumWidth(250)
        #fontFamilyModel = QStringListModel([str(fontDatabase.sty)])

        fontStyleListView = QListView()
        fontStyleListView.setFixedWidth(150)

        fontSizeListView = QListView()
        fontSizeListView.setFixedWidth(60)
        fontSizeModel = QStringListModel([
            str(v) for v in (6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24,
                             26, 28, 36, 48, 72)
        ])
        fontSizeListView.setModel(fontSizeModel)
        fontSizeListView.setEditTriggers(QAbstractItemView.NoEditTriggers)

        fontSampleWidget = QLabel(u'ІіЇїРр')
        fontSampleWidget.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
        fontSampleWidget.setStyleSheet(r'''QLabel {
          font: normal normal 72pt "Consolas";
          padding: 3px;
          qproperty-alignment: AlignCenter;
          color: black;
          background-color: white;
          }''')

        sampleGroup = QGroupBox(u'Зразок:')
        sampleLayout = QHBoxLayout(sampleGroup)
        sampleLayout.addWidget(fontSampleWidget)

        fontFilterLayout = QHBoxLayout()

        fontAccessFilterGroup = QGroupBox(u'Доступність:')
        fontAccessFilterLayout = QVBoxLayout(fontAccessFilterGroup)
        fontAccessFilterLayout.addWidget(fontFreeFilterChecker)
        fontAccessFilterLayout.addWidget(fontNoFreeFilterChecker)
        fontAccessFilterLayout.addStretch()
        fontFilterLayout.addWidget(fontAccessFilterGroup)

        fontUseFilterGroup = QGroupBox(u'Призначення:')
        fontUseFilterLayout = QVBoxLayout(fontUseFilterGroup)
        fontUseFilterLayout.addWidget(fontUseStrict_FilterChecker)
        fontUseFilterLayout.addWidget(fontUseWriting_FilterChecker)
        fontUseFilterLayout.addWidget(fontUseFantasy_FilterChecker)
        fontFilterLayout.addWidget(fontUseFilterGroup)

        fontRatingFilterGroup = QGroupBox(u'Оцінка:')
        fontRatingFilterLayout = QVBoxLayout(fontRatingFilterGroup)
        fontRatingFilterLayout.addWidget(fontRating5FilterChecker)
        fontRatingFilterLayout.addWidget(fontRating4FilterChecker)
        fontRatingFilterLayout.addWidget(fontRating3FilterChecker)
        fontFilterLayout.addWidget(fontRatingFilterGroup)

        fontLayout = QGridLayout()

        familyLayout = QVBoxLayout()
        familyLayout.setSpacing(3)
        familyLayout.addWidget(QLabel(u'Шрифт:'))
        familyLayout.addWidget(fontFamilyListView)
        fontLayout.addLayout(familyLayout, 0, 0)

        styleLayout = QVBoxLayout()
        styleLayout.setSpacing(3)
        styleLayout.addWidget(QLabel(u'Стиль:'))
        styleLayout.addWidget(fontStyleListView)
        fontLayout.addLayout(styleLayout, 0, 1)

        sizeLayout = QVBoxLayout()
        sizeLayout.setSpacing(3)
        sizeLayout.addWidget(QLabel(u'Розмір:'))
        sizeLayout.addWidget(fontSizeListView)
        fontLayout.addLayout(sizeLayout, 0, 2)

        fontLayout.addWidget(sampleGroup, 1, 0, 1, 3)

        bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)

        layout = QVBoxLayout(self)
        testButton = QPushButton(u'Тестова: відкрити шрифт')
        testButton.clicked.connect(lambda: QFontDialog.getFont())
        layout.addWidget(testButton)
        layout.addLayout(fontFilterLayout)
        layout.addLayout(fontLayout)
        layout.addSpacing(5)
        layout.addWidget(bbox)

        self.setWindowTitle(u'Вибір шрифта')
        self.setWindowFlags(self.windowFlags()
                            ^ Qt.WindowContextHelpButtonHint)

        # Налаштування.
        fontMaxPointSize = fontSizeListView.font()
        # print(QFontDatabase.families())
        fontMaxPointSize.setPointSize(72)
        fm = QFontMetrics(fontMaxPointSize)
        fontSampleWidget.setMinimumHeight(
            fm.size(Qt.TextSingleLine
                    | Qt.TextShowMnemonic, u'Їр').height())

        fontSizeListView.setCurrentIndex(
            fontSizeModel.match(fontSizeModel.index(0, 0), Qt.DisplayRole,
                                fontSizeListView.font().pointSize())[0])

        fontFreeFilterChecker.setChecked(True)

        fontUseStrict_FilterChecker.setChecked(True)

        fontRating5FilterChecker.setChecked(True)
        fontRating4FilterChecker.setChecked(True)
Beispiel #24
0
    def __init__(self, pathYaml, nameclass, ports, parent=None):
        super(chOptions, self).__init__(parent)
        doc = "No description"
        #         try:
        #             if '_' in nameclass:
        #                 firstAttr = nameclass[0:nameclass.index("_")]
        #                 secondAttr = nameclass[nameclass.index("_") + 1:]
        #                 TxtToExecute = firstAttr + "." + secondAttr + "().help(True)"
        #             else:
        #                 firstAttr = nameclass
        #                 secondAttr = ''
        #                 TxtToExecute = firstAttr + ".help(True)"
        #             TxtToImport = "from nipype.interfaces import " + firstAttr
        #             exec(TxtToImport)
        #             doc = eval(TxtToExecute)
        #             doc = doc[doc.index('[Optional]') + 11:doc.index('Outputs')]
        #         except Exception as e:
        #             doc = "No description"
        self.nameclass = nameclass
        self.poqs = ports

        self.labels_inputs = self.poqs[0]
        self.values_inputs = self.poqs[1]

        self.setWindowTitle(nameclass)
        self.setWindowFlags(self.windowFlags()
                            & QtCore.Qt.WindowCloseButtonHint)

        menubar = QMenuBar()
        checkAll = QAction('Check all options', self)
        checkAll.setShortcut('Ctrl+A')
        menubar.addAction(checkAll)
        checkAll.triggered.connect(self.checkAllOptions)

        uncheckAll = QAction('Uncheck all options', self)
        uncheckAll.setShortcut('Ctrl+U')
        menubar.addAction(uncheckAll)
        uncheckAll.triggered.connect(self.uncheckAllOptions)

        self.listCh = []
        listLabels = []

        vbox = QVBoxLayout(self)
        vbox.addWidget(menubar)

        _ss = ports

        self.list1 = []
        self.list2 = []
        self.list3 = []

        for tr in _ss[0]:
            self.list1.append(tr)

        for tr in _ss[1]:
            self.list2.append(tr)
            self.list3.append(tr)

        scrolllayout = QVBoxLayout()

        scrollwidget = QWidget()
        scrollwidget.setLayout(scrolllayout)

        scroll = QScrollArea()
        scroll.setWidgetResizable(True)
        scroll.setWidget(scrollwidget)

        desc = QTextEdit()
        desc.setPlainText(doc)
        desc.setReadOnly(True)
        desc.setLineWrapMode(True)

        font = desc.document().defaultFont()
        fontMetrics = QFontMetrics(font)
        textSize = fontMetrics.size(0, doc)

        textWidth = textSize.width() + 30
        textHeight = textSize.height() + 30

        desc.setMinimumSize(textWidth, textHeight)
        desc.resize(textWidth, textHeight)

        hbox2 = QHBoxLayout()

        vbox2 = QVBoxLayout()

        with open(pathYaml, 'r', encoding='utf8') as stream:
            try:
                self.dicts = yaml.load(stream, yaml.FullLoader)
                for el in self.dicts[nameclass]:
                    checkedTo = False
                    enableTo = True
                    if el in self.list1:
                        ind = self.list1.index(el)
                        self.list1.remove(el)
                        if 'Node(' in str(self.list2[ind]):
                            enableTo = False
                        vals = self.list2[ind]
                        del self.list2[ind]
                        del self.list3[ind]
                        checkedTo = True
                    b = QCheckBox(el, self)
                    b.setChecked(checkedTo)
                    b.setEnabled(enableTo)
                    self.listCh.append(b)
                    listLabels.append(b.text())
                    vbox2.addWidget(self.listCh[-1])
            except Exception as exc:
                print('yamlerror', exc)
                return

        with open(pathYaml, 'r', encoding='utf8') as stream:
            rd = stream.readlines()
            rd = rd[rd.index(nameclass + ":\n") + 1:]
            #             rd = rd[:len(self.listCh)]
            doc = ''
            n = len(listLabels)
            for lst in rd:
                tmp = ''
                try:
                    tmp = lst.rstrip()
                    tmp = tmp[:tmp.index('#')]
                    tmp = tmp[:tmp.index(':')]
                    if n == 0:
                        break
                    if tmp.strip() in listLabels:
                        n = n - 1
                    doc = doc + "<br><span style=\" font-size:10pt; font-weight:600; color:#222222;\" >" + tmp + " : </span><br>"
                except Exception as e:
                    pass
                comm = ''
                try:
                    comm = lst[lst.index('#') + 1:]
                    doc = doc + "<span style=\" font-size:10pt; font-weight:600; color:#2222ee;\" >" + comm + "</span><br>"
                except Exception as e:
                    pass
#                 if len(comm) != 0:

            if len(doc) != 0:
                desc.clear()
                desc.append(doc)

        hbox2.addLayout(vbox2)
        hbox2.addWidget(desc)

        scrolllayout.addLayout(hbox2)

        vbox.addWidget(scroll)
        buttonOk = QPushButton('Ok', self)
        buttonCancel = QPushButton('Cancel', self)
        hboxButton = QHBoxLayout()
        hboxButton.addWidget(buttonOk)
        hboxButton.addWidget(buttonCancel)
        vbox.addLayout(hboxButton)

        self.setMinimumWidth(800)
        buttonOk.clicked.connect(self.go)
        buttonCancel.clicked.connect(self.CANCEL)
Beispiel #25
0
    def _set_render_parameters(self):

        # get size of widget
        size = self.size()
        w = size.width()
        h = size.height()

        # starting coordinates of drawing
        # TODO: modify for horizontal/vertical alignment
        #-----------------------------------------------------------------------
        widget_x = 0.0
        widget_y = 0.0

        # x-axis tick labels
        #-----------------------------------------------------------------------
        labelFontMetrics = QFontMetrics(self._labelFont)

        xaxis_min = min(self._xMin, self._xMax)
        xaxis_max = max(self._xMin, self._xMax)

        self._xaxis_ticks_value = []
        self._xaxis_ticks_text_size = []
        tick_value = self._xOriginValue
        while tick_value < xaxis_max:
            if tick_value > xaxis_min:
                self._xaxis_ticks_value.append(tick_value)
                tick_text = "{:.1f}".format(tick_value)
                self._xaxis_ticks_text_size.append(
                    labelFontMetrics.size(Qt.TextSingleLine, tick_text))

            tick_value += self._xTickInterval

        tick_value = self._xOriginValue - self._xTickInterval
        while tick_value > xaxis_min:
            if tick_value < xaxis_max:
                self._xaxis_ticks_value.append(tick_value)
                tick_text = "{:.1f}".format(tick_value)
                self._xaxis_ticks_text_size.append(
                    labelFontMetrics.size(Qt.TextSingleLine, tick_text))

            tick_value -= self._xTickInterval

        xaxis_ticks_text_max_height = max(
            [s.height() for s in self._xaxis_ticks_text_size])
        xaxis_ticks_text_max_width = max(
            [s.width() for s in self._xaxis_ticks_text_size])

        # y-axis tick labels
        #-----------------------------------------------------------------------
        yaxis_min = min(self._yMin, self._yMax)
        yaxis_max = max(self._yMin, self._yMax)

        self._yaxis_ticks_value = []
        self._yaxis_ticks_text_size = []
        tick_value = self._yOriginValue
        while tick_value < yaxis_max:
            if tick_value > yaxis_min:
                self._yaxis_ticks_value.append(tick_value)
                tick_text = "{:.1f}".format(tick_value)
                self._yaxis_ticks_text_size.append(
                    labelFontMetrics.size(Qt.TextSingleLine, tick_text))

            tick_value += self._yTickInterval

        tick_value = self._yOriginValue - self._yTickInterval
        while tick_value > yaxis_min:
            if tick_value < yaxis_max:
                self._yaxis_ticks_value.append(tick_value)
                tick_text = "{:.1f}".format(tick_value)
                self._yaxis_ticks_text_size.append(
                    labelFontMetrics.size(Qt.TextSingleLine, tick_text))

            tick_value -= self._yTickInterval

        yaxis_ticks_text_max_height = max(
            [s.height() for s in self._yaxis_ticks_text_size])
        yaxis_ticks_text_max_width = max(
            [s.width() for s in self._yaxis_ticks_text_size]) * 1.1

        # axes
        #-----------------------------------------------------------------------
        self._axes_tick_pen = QPen(Qt.black, 1.0, Qt.DashLine)
        self._axes_tick_brush = QBrush(Qt.NoBrush)

        #self._axes_origin_pen = QPen(Qt.black, 2.0, Qt.DashDotLine)
        self._axes_origin_pen = QPen(Qt.black, 2.0, Qt.SolidLine)
        self._axes_origin_brush = QBrush(Qt.NoBrush)

        # bounding box for plot
        #-----------------------------------------------------------------------
        self._bbox_pen = QPen(Qt.black, 1.0)
        self._bbox_brush = QBrush(Qt.NoBrush)

        self._bbox_x0 = widget_x + yaxis_ticks_text_max_width
        self._bbox_x1 = w - 1
        self._bbox_y0 = widget_y
        self._bbox_y1 = h - xaxis_ticks_text_max_height - 1

        self._bbox_rect = QRectF(QPointF(self._bbox_x0, self._bbox_y0),
                                 QPointF(self._bbox_x1, self._bbox_y1))

        # origin lines
        #-----------------------------------------------------------------------
        self._xaxis_origin_x = map_value_to_scale(self._xOriginValue,
                                                  self._xMin, self._xMax,
                                                  self._bbox_x0, self._bbox_x1)
        self._xaxis_origin_line = QLineF(
            QPointF(self._xaxis_origin_x, self._bbox_y0),
            QPointF(self._xaxis_origin_x, self._bbox_y1))

        self._yaxis_origin_y = map_value_to_scale(self._yOriginValue,
                                                  self._yMin, self._yMax,
                                                  self._bbox_y1, self._bbox_y0)
        self._yaxis_origin_line = QLineF(
            QPointF(self._bbox_x0, self._yaxis_origin_y),
            QPointF(self._bbox_x1, self._yaxis_origin_y))

        # x-axis ticks
        #-----------------------------------------------------------------------
        self._xaxis_ticks = []
        self._xaxis_ticks_text = []
        self._xaxis_ticks_text_rect = []
        for tick_value in self._xaxis_ticks_value:

            # define the tick lines to draw
            tick_x = map_value_to_scale(tick_value, self._xMin, self._xMax,
                                        self._bbox_x0, self._bbox_x1)
            tick_line = QLineF(QPointF(tick_x, self._bbox_y0),
                               QPointF(tick_x, self._bbox_y1))
            self._xaxis_ticks.append(tick_line)

            # define the tick labels to draw
            tick_text = "{:.1f}".format(tick_value)
            tick_size = labelFontMetrics.size(Qt.TextSingleLine, tick_text)
            tick_rect = QRectF(
                QPointF(tick_x - (tick_size.width() / 2.0), self._bbox_y1),
                QSizeF(tick_size))

            self._xaxis_ticks_text.append(tick_text)
            self._xaxis_ticks_text_rect.append(tick_rect)

        # y-axis ticks
        #-----------------------------------------------------------------------
        self._yaxis_ticks = []
        self._yaxis_ticks_text = []
        self._yaxis_ticks_text_rect = []
        for tick_value in self._yaxis_ticks_value:

            # define the tick lines to draw
            tick_y = map_value_to_scale(tick_value, self._yMin, self._yMax,
                                        self._bbox_y1, self._bbox_y0)
            tick_line = QLineF(QPointF(self._bbox_x0, tick_y),
                               QPointF(self._bbox_x1, tick_y))
            self._yaxis_ticks.append(tick_line)

            # define the tick labels to draw
            tick_text = "{:.1f}".format(tick_value)
            tick_size = labelFontMetrics.size(Qt.TextSingleLine, tick_text)
            tick_rect = QRectF(
                QPointF(widget_x, tick_y - (tick_size.height() / 2.0)),
                QSizeF(yaxis_ticks_text_max_width, tick_size.height()))

            self._yaxis_ticks_text.append(tick_text)
            self._yaxis_ticks_text_rect.append(tick_rect)

        # define plot traces
        #-----------------------------------------------------------------------
        for plot_key in self._plots.keys():
            self._plot_points[plot_key] = []
            for plot_value in self._plots[plot_key]:
                plot_value_x = map_value_to_scale(plot_value[0], self._xMin,
                                                  self._xMax, self._bbox_x0,
                                                  self._bbox_x1)
                plot_value_y = map_value_to_scale(plot_value[1], self._yMin,
                                                  self._yMax, self._bbox_y1,
                                                  self._bbox_y0)
                self._plot_points[plot_key].append(
                    QPointF(plot_value_x, plot_value_y))
Beispiel #26
0
 def _set_render_parameters(self):
     
     # get size of widget
     size = self.size()
     w = size.width()
     h = size.height()
     
     
     # starting coordinates of drawing
     # TODO: modify for horizontal/vertical alignment
     #-----------------------------------------------------------------------
     widget_x = 0.0
     widget_y = 0.0
     
     # x-axis tick labels
     #-----------------------------------------------------------------------
     labelFontMetrics = QFontMetrics(self._labelFont);
     
     xaxis_min = min(self._xMin, self._xMax)
     xaxis_max = max(self._xMin, self._xMax)
     
     self._xaxis_ticks_value = []
     self._xaxis_ticks_text_size = []
     tick_value = self._xOriginValue
     while tick_value < xaxis_max:
         if tick_value > xaxis_min:
             self._xaxis_ticks_value.append(tick_value)
             tick_text = "{:.1f}".format(tick_value)
             self._xaxis_ticks_text_size.append(labelFontMetrics.size(Qt.TextSingleLine, tick_text))
             
         tick_value += self._xTickInterval
         
     tick_value = self._xOriginValue - self._xTickInterval
     while tick_value > xaxis_min:
         if tick_value < xaxis_max:
             self._xaxis_ticks_value.append(tick_value)
             tick_text = "{:.1f}".format(tick_value)
             self._xaxis_ticks_text_size.append(labelFontMetrics.size(Qt.TextSingleLine, tick_text))
             
         tick_value -= self._xTickInterval
         
     xaxis_ticks_text_max_height = max([s.height() for s in self._xaxis_ticks_text_size])
     xaxis_ticks_text_max_width = max([s.width() for s in self._xaxis_ticks_text_size])
     
     
     # y-axis tick labels
     #-----------------------------------------------------------------------
     yaxis_min = min(self._yMin, self._yMax)
     yaxis_max = max(self._yMin, self._yMax)
     
     self._yaxis_ticks_value = []
     self._yaxis_ticks_text_size = []
     tick_value = self._yOriginValue
     while tick_value < yaxis_max:
         if tick_value > yaxis_min:
             self._yaxis_ticks_value.append(tick_value)
             tick_text = "{:.1f}".format(tick_value)
             self._yaxis_ticks_text_size.append(labelFontMetrics.size(Qt.TextSingleLine, tick_text))
             
         tick_value += self._yTickInterval
         
     tick_value = self._yOriginValue - self._yTickInterval
     while tick_value > yaxis_min:
         if tick_value < yaxis_max:
             self._yaxis_ticks_value.append(tick_value)
             tick_text = "{:.1f}".format(tick_value)
             self._yaxis_ticks_text_size.append(labelFontMetrics.size(Qt.TextSingleLine, tick_text))
             
         tick_value -= self._yTickInterval
         
     yaxis_ticks_text_max_height = max([s.height() for s in self._yaxis_ticks_text_size])
     yaxis_ticks_text_max_width = max([s.width() for s in self._yaxis_ticks_text_size]) * 1.1
     
     
     
     # axes
     #-----------------------------------------------------------------------
     self._axes_tick_pen = QPen(Qt.black, 1.0, Qt.DashLine)
     self._axes_tick_brush = QBrush(Qt.NoBrush)
     
     #self._axes_origin_pen = QPen(Qt.black, 2.0, Qt.DashDotLine)
     self._axes_origin_pen = QPen(Qt.black, 2.0, Qt.SolidLine)
     self._axes_origin_brush = QBrush(Qt.NoBrush)
     
     
     # bounding box for plot
     #-----------------------------------------------------------------------
     self._bbox_pen = QPen(Qt.black, 1.0)
     self._bbox_brush = QBrush(Qt.NoBrush)
     
     self._bbox_x0 = widget_x + yaxis_ticks_text_max_width
     self._bbox_x1 = w - 1
     self._bbox_y0 = widget_y
     self._bbox_y1 = h - xaxis_ticks_text_max_height - 1
     
     self._bbox_rect = QRectF(QPointF(self._bbox_x0, self._bbox_y0), QPointF(self._bbox_x1, self._bbox_y1))
     
     
     # origin lines
     #-----------------------------------------------------------------------
     self._xaxis_origin_x = map_value_to_scale(self._xOriginValue, self._xMin, self._xMax, self._bbox_x0, self._bbox_x1)
     self._xaxis_origin_line = QLineF(QPointF(self._xaxis_origin_x, self._bbox_y0), QPointF(self._xaxis_origin_x, self._bbox_y1))
     
     self._yaxis_origin_y = map_value_to_scale(self._yOriginValue, self._yMin, self._yMax, self._bbox_y1, self._bbox_y0)
     self._yaxis_origin_line = QLineF(QPointF(self._bbox_x0, self._yaxis_origin_y), QPointF(self._bbox_x1, self._yaxis_origin_y))
     
     
     # x-axis ticks
     #-----------------------------------------------------------------------
     self._xaxis_ticks = []
     self._xaxis_ticks_text = []
     self._xaxis_ticks_text_rect = []
     for tick_value in self._xaxis_ticks_value:
     
         # define the tick lines to draw
         tick_x = map_value_to_scale(tick_value, self._xMin, self._xMax, self._bbox_x0, self._bbox_x1)
         tick_line = QLineF(QPointF(tick_x, self._bbox_y0), QPointF(tick_x, self._bbox_y1))
         self._xaxis_ticks.append(tick_line)
         
         # define the tick labels to draw
         tick_text = "{:.1f}".format(tick_value)
         tick_size = labelFontMetrics.size(Qt.TextSingleLine, tick_text)
         tick_rect = QRectF(QPointF(tick_x - (tick_size.width() / 2.0), self._bbox_y1), QSizeF(tick_size))
         
         self._xaxis_ticks_text.append(tick_text)
         self._xaxis_ticks_text_rect.append(tick_rect)
     
     
     # y-axis ticks
     #-----------------------------------------------------------------------
     self._yaxis_ticks = []
     self._yaxis_ticks_text = []
     self._yaxis_ticks_text_rect = []
     for tick_value in self._yaxis_ticks_value:
     
         # define the tick lines to draw
         tick_y = map_value_to_scale(tick_value, self._yMin, self._yMax, self._bbox_y1, self._bbox_y0)
         tick_line = QLineF(QPointF(self._bbox_x0, tick_y), QPointF(self._bbox_x1, tick_y))
         self._yaxis_ticks.append(tick_line)
         
         # define the tick labels to draw
         tick_text = "{:.1f}".format(tick_value)
         tick_size = labelFontMetrics.size(Qt.TextSingleLine, tick_text)
         tick_rect = QRectF(QPointF(widget_x, tick_y - (tick_size.height() / 2.0)), QSizeF(yaxis_ticks_text_max_width, tick_size.height()))
         
         self._yaxis_ticks_text.append(tick_text)
         self._yaxis_ticks_text_rect.append(tick_rect)
         
     
     
     # define plot traces
     #-----------------------------------------------------------------------
     for plot_key in self._plots.keys():
         self._plot_points[plot_key] = []
         for plot_value in self._plots[plot_key]:
             plot_value_x = map_value_to_scale(plot_value[0], self._xMin, self._xMax, self._bbox_x0, self._bbox_x1)
             plot_value_y = map_value_to_scale(plot_value[1], self._yMin, self._yMax, self._bbox_y1, self._bbox_y0)
             self._plot_points[plot_key].append(QPointF(plot_value_x, plot_value_y))
Beispiel #27
0
    def _positions(self, option, tags):
        fm = QFontMetrics(option.font)

        for tag in tags:
            sz = fm.size(Qt.TextSingleLine, tag)
            yield sz, tag
Beispiel #28
0
class TimedDigram(QWidget, object):
    class WrongDataFormatException(Exception):
        pass

    def __init__(self, padding=4, y_unit="kg", y_format="{:3.0f}", *args):
        super(TimedDigram, self).__init__(*args)
        self.padding = padding
        self.y_unit = y_unit
        self.data = []
        self.x_range = datetime.now(), datetime.now()
        self.y_range = 0.0, 0.0
        self.y_format = y_format
        self.gray_line_color = QColor(140, 140, 140)
        self.axis_number_color = QColor(0, 0, 0)
        self.gray_pen = QPen(self.gray_line_color, 1, Qt.SolidLine)
        self.text_pen = QPen(self.axis_number_color, 1, Qt.SolidLine)
        self.gray_brush = QBrush(self.gray_line_color)
        self.font = QFont("Helvetica", pointSize=8, weight=0, italic=False)
        self.fm = QFontMetrics(self.font)

    def paintEvent(self, *args):
        qp = QPainter()
        qp.begin(self)
        qp.setRenderHint(QPainter.TextAntialiasing, True)
        qp.setRenderHint(QPainter.Antialiasing, True)
        self.draw(qp)
        qp.end()

    def draw(self, qp):
        size = self.size()
        self.draw_x_axis(qp, size)
        self.draw_y_axis(qp, size)

    def draw_x_axis(self, qp, size):
        qp.setPen(self.gray_pen)
        qp.setBrush(self.gray_brush)
        unit_text_width = self.fm.size(Qt.TextSingleLine, self.y_unit).width()
        time_text_height = self.fm.size(Qt.TextSingleLine, "12:00").height()
        qp.drawLine(self.padding + unit_text_width + 1 - 4,
                    size.height() - time_text_height - self.padding,
                    size.width() - self.padding,
                    size.height() - time_text_height - self.padding)
        polygon = QPolygon()
        polygon.append(
            QPoint(size.width() - self.padding,
                   size.height() - time_text_height - self.padding))
        polygon.append(
            QPoint(size.width() - self.padding - 6,
                   size.height() - time_text_height - self.padding + 4))
        polygon.append(
            QPoint(size.width() - self.padding - 6,
                   size.height() - time_text_height - self.padding - 4))
        qp.drawPolygon(polygon, fillRule=Qt.WindingFill)
        if self.x_range[1] - self.x_range[0] > timedelta(seconds=0):
            self.draw_x_axis_labels(qp, size, unit_text_width,
                                    time_text_height)

    def draw_y_axis(self, qp, size):
        qp.setPen(self.gray_pen)
        qp.setBrush(self.gray_brush)
        unit_text_width = self.fm.size(Qt.TextSingleLine, self.y_unit).width()
        time_text_height = self.fm.size(Qt.TextSingleLine, "12:00").height()
        qp.drawLine(self.padding + unit_text_width + 1,
                    size.height() - time_text_height + 4 - self.padding,
                    self.padding + unit_text_width + 1, self.padding)
        polygon = QPolygon()
        polygon.append(QPoint(self.padding + unit_text_width + 1,
                              self.padding))
        polygon.append(
            QPoint(self.padding + unit_text_width + 1 - 4, self.padding + 6))
        polygon.append(
            QPoint(self.padding + unit_text_width + 1 + 4, self.padding + 6))
        qp.drawPolygon(polygon, fillRule=Qt.WindingFill)
        if self.y_range[1] - self.y_range[0] > 0:
            self.draw_y_axis_labels(qp, size, unit_text_width,
                                    time_text_height)
        qp.setFont(self.font)
        qp.setPen(self.text_pen)
        qp.drawText(self.padding, self.padding + 15, self.y_unit)

    def draw_x_axis_labels(self, qp, size, unit_text_width, time_text_height):
        qp.setFont(self.font)
        available_x_distance = size.width() - self.padding - 6 - (
            self.padding + unit_text_width + 1)
        display_hours = (self.x_range[1] - self.x_range[0]) < timedelta(
            days=1, hours=3)
        if display_hours:
            current_tick = datetime(year=self.x_range[0].year,
                                    month=self.x_range[0].month,
                                    day=self.x_range[0].day,
                                    hour=self.x_range[0].hour + 1)

        else:
            current_tick = datetime(year=self.x_range[0].year,
                                    month=self.x_range[0].month,
                                    day=self.x_range[0].day + 1)
        x_tick_pos = self.padding + unit_text_width + 1 + (
            (current_tick - self.x_range[0]) /
            (self.x_range[1] - self.x_range[0]) * available_x_distance)
        qp.setPen(self.gray_pen)
        qp.drawLine(x_tick_pos,
                    size.height() - time_text_height - self.padding - 3,
                    x_tick_pos,
                    size.height() - time_text_height - self.padding + 7)
        qp.setPen(self.text_pen)
        if display_hours:
            current_text = current_tick.strftime("%H:%M")
        else:
            current_text = current_tick.strftime("%d.%m.")
        current_text_width = self.fm.size(Qt.TextSingleLine,
                                          current_text).width()
        qp.drawText(x_tick_pos - current_text_width // 2,
                    size.height() - self.padding, current_text)
        current_text_end = x_tick_pos + current_text_width // 2
        if display_hours:
            current_tick = current_tick + timedelta(hours=1)
        else:
            current_tick = current_tick + timedelta(days=1)
        while current_tick < self.x_range[1]:
            qp.setPen(self.gray_pen)
            x_tick_pos = self.padding + unit_text_width + 1 + (
                (current_tick - self.x_range[0]) /
                (self.x_range[1] - self.x_range[0]) * available_x_distance)
            if x_tick_pos - current_text_width * 1.1 > current_text_end and \
                    x_tick_pos + current_text_width // 2 <= size.width() - self.padding:
                qp.drawLine(
                    x_tick_pos,
                    size.height() - time_text_height - self.padding - 3,
                    x_tick_pos,
                    size.height() - time_text_height - self.padding + 7)
            else:
                qp.drawLine(
                    x_tick_pos,
                    size.height() - time_text_height - self.padding - 3,
                    x_tick_pos,
                    size.height() - time_text_height - self.padding + 3)
            if display_hours:
                current_text = current_tick.strftime("%H:%M")
            else:
                current_text = current_tick.strftime("%d.%m.")
            current_text_width = self.fm.size(Qt.TextSingleLine,
                                              current_text).width()
            if x_tick_pos - current_text_width * 1.1 > current_text_end and \
                    x_tick_pos + current_text_width // 2 <= size.width() - self.padding:
                qp.setPen(self.text_pen)
                qp.drawText(x_tick_pos - current_text_width // 2,
                            size.height() - self.padding, current_text)
                current_text_end = x_tick_pos + current_text_width // 2
            if display_hours:
                current_tick = current_tick + timedelta(hours=1)
            else:
                current_tick = current_tick + timedelta(days=1)

    def draw_y_axis_labels(self, qp, size, unit_text_width, time_text_height):
        qp.setFont(self.font)
        available_y_distance = size.height(
        ) - time_text_height + 4 - 2 * self.padding
        tick_distance = ceil(time_text_height *
                             (self.y_range[1] - self.y_range[0]) /
                             available_y_distance)
        current_tick = ceil(self.y_range[0])
        y_tick_pos = size.height() - time_text_height - self.padding - (
            current_tick - self.y_range[0]) / (
                self.y_range[1] - self.y_range[0]) * available_y_distance
        current_text = self.y_format.format(current_tick)
        current_text_size = self.fm.size(Qt.TextSingleLine, current_text)
        qp.setPen(self.gray_pen)
        qp.drawLine(self.padding + unit_text_width + 1 - 3, y_tick_pos,
                    self.padding + unit_text_width + 1 + 3, y_tick_pos)
        qp.setPen(self.text_pen)
        qp.drawText(
            self.padding + unit_text_width + 1 - 3 - current_text_size.width(),
            y_tick_pos + current_text_size.height() / 4, current_text)
        current_tick_end = y_tick_pos - current_text_size.height() / 2
        current_tick = current_tick + tick_distance
        while current_tick < self.y_range[1]:
            qp.setPen(self.gray_pen)
            y_tick_pos = size.height(
            ) - time_text_height + 4 - self.padding - (
                current_tick - self.y_range[0]) / (
                    self.y_range[1] - self.y_range[0]) * available_y_distance
            current_text = self.y_format.format(current_tick)
            current_text_size = self.fm.size(Qt.TextSingleLine, current_text)
            qp.setPen(self.gray_pen)
            if current_tick_end >= y_tick_pos - current_text_size.height(
            ) // 2 > self.padding + 15:
                qp.drawLine(self.padding + unit_text_width + 1 - 3, y_tick_pos,
                            self.padding + unit_text_width + 1 + 3, y_tick_pos)
                qp.setPen(self.text_pen)
                qp.drawText(
                    self.padding + unit_text_width + 1 - 3 -
                    current_text_size.width(),
                    y_tick_pos + current_text_size.height() / 4, current_text)
                current_tick_end = y_tick_pos - current_text_size.height() / 2
            else:
                qp.drawLine(self.padding + unit_text_width + 1 - 3, y_tick_pos,
                            self.padding + unit_text_width + 1 + 3, y_tick_pos)
            current_tick = current_tick + tick_distance
Beispiel #29
0
class PFSActivity(PFSActive):
	def __init__(self, id: str, x: int, y: int, text: str="Atividade"):
		PFSActive.__init__(self, id, x, y)
		self._subPage = None
		self._textFont = QFont("Helvetica", 15)
		self._fontMetrics = QFontMetrics(self._textFont)
		self._minWidth = 0
		self._minHeight = 0
		self.setText(text)
		self._width = self._minWidth
		self._height = self._minHeight
		self._inputNum = 1
		self._outputNum = 1
		self._space = 5
		
	def inputNum(self):
		return self._inputNum
	
	def outputNum(self):
		return self._outputNum
		
	def copy(self, x, y):
		ans = PFSActivityContent()
		ans._id = self._id
		ans._x = self.x() - x
		ans._y = self.y() - y
		ans._text = self._text
		ans._width = self._width
		ans._height = self._height
		ans._textFont = self._textFont
		ans._fontMetrics = self._fontMetrics
		ans._pen = self._pen
		ans._brush = self._brush
		ans._tags = self._tags
		ans._inputNum = self._inputNum
		ans._outputNum = self._outputNum
		return ans
	
	def paste(content, id, dx, dy):
		ans = PFSActivity(id, content._x + dx, content._y + dy, content._text)
		ans._width = content._width
		ans._height = content._height
		ans._textFont = content._textFont
		ans._fontMetrics = content._fontMetrics
		ans._pen = content._pen
		ans._brush = content._brush
		ans._inputNum = content._inputNum
		ans._outputNum = content._outputNum
		for tag in content._tags:
			ans.addTag(tag._name, tag._use, False)
		return ans
	
	def tree(self, parent):
		tree = PFSTreeItem(parent, [self._id], 0, QIcon(PFSActivityIcon()))
		tree.clicked.connect(self.selectSingle)
		if self._subPage is not None:
			child = self._subPage.tree(tree)		
		return tree
	
	def simpleTree(self, parent):
		tree = PFSTreeItem(parent, [self._id], 0, QIcon(PFSActivityIcon()))
		tree.clicked.connect(self.selectSingle)
		return tree
	
	def hasSubPage(self):
		return self._subPage is not None
	
	def setSubPage(self, page):
		if self._subPage is not None:
			return False
		self._subPage = page
		return True
	
	def removeSubPage(self):
		self._subPage = None
	
	def subPage(self):
		return self._subPage
	
	def generateXml(self, xml: QXmlStreamWriter):
		PFSXmlBase.open(xml)
		xml.writeStartElement("activity")
		xml.writeAttribute("id", self._id)
		xml.writeAttribute("inputnum", str(self._inputNum))
		xml.writeAttribute("outputnum", str(self._outputNum))
		PFSXmlBase.graphicsNode(xml, QRectF(self.x(), self.y(), self._width, self._height), self._pen, self._brush)
		PFSXmlBase.text(xml, self._text, 0, 0, font=self._textFont, tag="text", align="center")
		PFSBasicElement.generateXml(self, xml)
		xml.writeEndElement() #fecha activity
		PFSXmlBase.close(xml)
	
	def createFromXml(node: QDomNode):
		if node.nodeName() != "activity":
			return None
		if not (node.hasAttributes() and node.attributes().contains("id")):
			return None
		id = node.attributes().namedItem("id").nodeValue()
		childs = node.childNodes()
		graphics = None
		text = None
		if node.attributes().contains("inputnum"):
			inputNum =  int(node.attributes().namedItem("inputnum").nodeValue())
		else:
			inputNum = 1
		if node.attributes().contains("outputnum"):
			outputNum =  int(node.attributes().namedItem("outputnum").nodeValue())
		else:
			outputNum = 1
		tags = []
		for i in range(childs.count()):
			child = childs.at(i)
			if child.nodeName() == "graphics":
				graphics = PFSXmlBase.getNode(child)
			if child.nodeName() == "text":
				text = PFSXmlBase.getText(child)
			if child.nodeName() == "tags":
				tags = PFSBasicElement.createFromXml(child)
		if graphics is not None and text is not None:
			ac = PFSActivityContent()
			ac._id = id
			ac._x = graphics.rect.x()
			ac._y = graphics.rect.y()
			ac._text = text.annotation
			ac._width = graphics.rect.width()
			ac._height = graphics.rect.height()		
			if text.font is not None:
				ac._textFont = text.font
				ac._fontMetrics = QFontMetrics(text.font)
			if graphics.line is not None:
				ac._pen = graphics.line
			if graphics.brush is not None:
				ac._brush = graphics.brush
			ac._tags = tags
			ac._inputNum = inputNum
			ac._outputNum = outputNum
			return ac
		return None
		
	def paint(self, p: QPainter, o: QStyleOptionGraphicsItem, w: QWidget):
		p.setPen(Qt.NoPen)
		p.setBrush(self._brush)
		rect = self.boundingRect()
		p.drawRect(rect)
		p.setPen(self._pen)
		p.setFont(self._textFont)
		p.drawText(rect, Qt.AlignCenter, self._text)
		p.save()
		if self.isSelected():
			if self._pen.color() == PFSElement.SELECTED_PEN:
				p.setPen(PFSElement.SELECTED_PEN_ALT)
			else:
				p.setPen(PFSElement.SELECTED_PEN)
		h = (self._height -self._space*(self._inputNum-1))/self._inputNum
		p.save()
		p.translate(self.x(), self.y())
		for i in range(self._inputNum):
			p.drawLine(0, 0, 6, 0)
			p.drawLine(0, h, 6, h)
			p.drawLine(0, 0, 0, h)
			p.translate(0, h + self._space)
		p.restore()
		h = (self._height -self._space*(self._outputNum-1))/self._outputNum
		p.translate(self.x() + self._width, self.y())
		for i in range(self._outputNum):
			p.drawLine(0, 0, -6, 0)
			p.drawLine(0, h, -6, h)
			p.drawLine(0, 0, 0, h)
			p.translate(0, h + self._space)	
		p.restore()
		
	def setText(self, text: str):
		self._text = text
		s = self.minimunSize()
		if self._width < s.width():
			self._width = s.width()
		if self._height < s.height():
			self._height = s.height()
		if self.scene() is not None:
			self.scene().update()
			self.changed.emit()
			
	def setInputNum(self, text: str):
		self._inputNum = int(text)
		if self.scene() is not None:
			self.scene().update()
			self.changed.emit()
	
	def setOutputNum(self, text: str):
		self._outputNum = int(text)
		if self.scene() is not None:
			self.scene().update()
			self.changed.emit()	
			
	def setFont(self, font: QFont):
		self._textFont = font
		self._fontMetrics = QFontMetrics(font)
		self.scene().update()
	
	def getText(self):
		return self._text
		
	def minimunSize(self):
		s = self._fontMetrics.size(Qt.TextExpandTabs, self._text)
		self._minWidth = s.width() + 15
		self._minHeight = s.height() + 4
		return QSizeF(self._minWidth, self._minHeight)
	
	def boundingRect(self):
		s = self.minimunSize()
		width = max(self._width,s.width()) 
		height = max(self._height,s.height())
		return QRectF(self.x(), self.y(), width, height)
	
	def getBestRelationPoint(self, p: QPointF) -> QPointF:
		r = self.sceneBoundingRect()
		if p.x() > r.center().x():
			x = r.right()
		else:
			x = r.x()
		y = p.y()
		if p.y() < r.y():
			y = r.y()
		elif p.y() > r.bottom():
			y = r.bottom()
		return QPointF(x, y)
		
	def getBestRelationPointInput(self, p: QPointF, i: int) -> QPointF:
		r = self.sceneBoundingRect()
		x = r.x()
		h = (self._height - (self._inputNum - 1)*self._space)/self._inputNum
		y0 = r.y() + (self._space + h)*i
		y = p.y()
		if y < y0:
			y = y0
		elif y > y0 + h:
			y = y0 + h
		return QPointF(x, y)
		
	def getBestRelationPointOutput(self, p: QPointF, i: int) -> QPointF:
		r = self.sceneBoundingRect()
		x = r.right()
		h = (self._height - (self._outputNum - 1)*self._space)/self._outputNum
		y0 = r.y() + (self._space + h)*i
		y = p.y()
		if y < y0:
			y = y0
		elif y > y0 + h:
			y = y0 + h
		return QPointF(x, y)
	
	def getBestRelationPointSecondary(self, p: QPointF, posX: float) -> QPointF:
		r = self.sceneBoundingRect()
		x = r.x() + 6 + posX/100*(self._width - 12)
		y = r.y()
		if p.y() > r.center().y():
			y = r.bottom()
		return QPointF(x, y)
	
	def propertiesTable(self):
		ans = []
		lblType = PFSTableLabel("Elemento")
		lblValue = PFSTableNormal("Atividade")
		lblValue.setFlags(Qt.NoItemFlags)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("ID")
		lblValue = PFSTableNormal(self._id)
		lblValue.setFlags(Qt.NoItemFlags)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Posição X")
		lblValue = PFSTableValueText(str(self.x()))
		lblValue.edited.connect(self.changeElementPosX)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Posição Y")
		lblValue = PFSTableValueText(str(self.y()))
		lblValue.edited.connect(self.changeElementPosY)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Largura")
		lblValue = PFSTableValueText(str(self._width))
		lblValue.edited.connect(self.changeElementWidth)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Altura")
		lblValue = PFSTableValueText(str(self._height))
		lblValue.edited.connect(self.changeElementHeight)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Texto")
		lblValue = PFSTableValueText(self._text)
		lblValue.edited.connect(self.changeText)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Fonte")
		lblValue = PFSTableValueButton(self._textFont.toString())
		lblValue.clicked.connect(self.changeFont)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Cor do contorno")
		lblValue = PFSTableValueButton(self._pen.color().name())
		lblValue.clicked.connect(self.changeLineColor)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Linha do contorno")
		lblValue = PFSTableValueCombo(self.PEN_LIST, self._pen.style())
		self.penEdited.connect(lblValue.updateText)
		lblValue.currentTextChanged.connect(self.changeLineStyle)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Espessura do contorno")
		lblValue = PFSTableValueText(str(self._pen.width()))
		lblValue.edited.connect(self.changeLineWidth)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Cor do preenchimento")
		lblValue = PFSTableValueButton(self._brush.color().name())
		lblValue.clicked.connect(self.changeFillColor)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Entradas")
		lblValue = PFSTableValueText(str(self._inputNum))
		lblValue.edited.connect(self.changeInputNum)
		ans.append([lblType, lblValue])
		lblType = PFSTableLabel("Saídas")
		lblValue = PFSTableValueText(str(self._outputNum))
		lblValue.edited.connect(self.changeOutputNum)
		ans.append([lblType, lblValue])		
		lblType = PFSTableLabelTags("Tags")
		lblValue = PFSTableValueBox(self._tags, self.createTag)
		ans.append([lblType, lblValue])
		return ans
	
	def changeText(self, prop):
		x = PFSUndoPropertyText(prop, self.setText)
		x.setText("Alterar texto")
		self.scene()._page._net.undoStack.push(x)
	
	def changeInputNum(self, prop):
		x = PFSUndoPropertyText(prop, self.setInputNum)
		x.setText("Alterar entradas")
		self.scene()._page._net.undoStack.push(x)
		
	def changeOutputNum(self, prop):
		x = PFSUndoPropertyText(prop, self.setOutputNum)
		x.setText("Alterar saídas")
		self.scene()._page._net.undoStack.push(x)	
	
	def changeFont(self):
		font, ans = QFontDialog.getFont(self._textFont, self.scene()._page._net, "Escolha a fonte do texto")
		if ans:
			x = PFSUndoPropertyButton(font, self._textFont, self.setFont)
			x.setText("Alterar fonte")
			self.scene()._page._net.undoStack.push(x)
	
	def changeElementWidth(self, prop):
		if float(prop.text()) > self._minWidth:
			x = PFSUndoPropertyText(prop, self.resizeWidth)
			x.setText("Alterar largura")
			self.scene()._page._net.undoStack.push(x)

	def changeElementHeight(self, prop):
		if float(prop.text()) > self._minHeight:
			x = PFSUndoPropertyText(prop, self.resizeHeight)
			x.setText("Alterar altura")
			self.scene()._page._net.undoStack.push(x)	
Beispiel #30
0
    def __init__(self, parent = None):
        super(MainWindow, self).__init__(parent)
        self.setWindowTitle('Basic Drawing')
        self.app = QCoreApplication.instance()
        self.setGeometry(self.app.myRectangle)
        st = self.app.style()
        self.params = (
            (str(QStyle.PM_ButtonMargin), 'ButtonMargin', st.pixelMetric(QStyle.PM_ButtonMargin)),
            (str(QStyle.PM_DockWidgetTitleBarButtonMargin), 'DockWidgetTitleBarButtonMargin', st.pixelMetric(QStyle.PM_DockWidgetTitleBarButtonMargin)),
            (str(QStyle.PM_ButtonDefaultIndicator), 'ButtonDefaultIndicator', st.pixelMetric(QStyle.PM_ButtonDefaultIndicator)),
            (str(QStyle.PM_MenuButtonIndicator), 'MenuButtonIndicator', st.pixelMetric(QStyle.PM_MenuButtonIndicator)),
            (str(QStyle.PM_ButtonShiftHorizontal), 'ButtonShiftHorizontal', st.pixelMetric(QStyle.PM_ButtonShiftHorizontal)),
            (str(QStyle.PM_ButtonShiftVertical), 'ButtonShiftVertical', st.pixelMetric(QStyle.PM_ButtonShiftVertical)),
            (str(QStyle.PM_DefaultFrameWidth), 'DefaultFrameWidth', st.pixelMetric(QStyle.PM_DefaultFrameWidth)),
            (str(QStyle.PM_SpinBoxFrameWidth), 'SpinBoxFrameWidth', st.pixelMetric(QStyle.PM_SpinBoxFrameWidth)),
            (str(QStyle.PM_ComboBoxFrameWidth), 'ComboBoxFrameWidth', st.pixelMetric(QStyle.PM_ComboBoxFrameWidth)),
            (str(QStyle.PM_MdiSubWindowFrameWidth), 'MdiSubWindowFrameWidth', st.pixelMetric(QStyle.PM_MdiSubWindowFrameWidth)),
            (str(QStyle.PM_MdiSubWindowMinimizedWidth), 'MdiSubWindowMinimizedWidth', st.pixelMetric(QStyle.PM_MdiSubWindowMinimizedWidth)),
            (str(QStyle.PM_LayoutLeftMargin), 'LayoutLeftMargin', st.pixelMetric(QStyle.PM_LayoutLeftMargin)),
            (str(QStyle.PM_LayoutTopMargin), 'LayoutTopMargin', st.pixelMetric(QStyle.PM_LayoutTopMargin)),
            (str(QStyle.PM_LayoutRightMargin), 'LayoutRightMargin', st.pixelMetric(QStyle.PM_LayoutRightMargin)),
            (str(QStyle.PM_LayoutBottomMargin), 'LayoutBottomMargin', st.pixelMetric(QStyle.PM_LayoutBottomMargin)),
            (str(QStyle.PM_LayoutHorizontalSpacing), 'LayoutHorizontalSpacing', st.pixelMetric(QStyle.PM_LayoutHorizontalSpacing)),
            (str(QStyle.PM_LayoutVerticalSpacing), 'LayoutVerticalSpacing', st.pixelMetric(QStyle.PM_LayoutVerticalSpacing)),
            (str(QStyle.PM_MaximumDragDistance), 'MaximumDragDistance', st.pixelMetric(QStyle.PM_MaximumDragDistance)),
            (str(QStyle.PM_ScrollBarExtent), 'ScrollBarExtent', st.pixelMetric(QStyle.PM_ScrollBarExtent)),
            (str(QStyle.PM_ScrollBarSliderMin), 'ScrollBarSliderMin', st.pixelMetric(QStyle.PM_ScrollBarSliderMin)),
            (str(QStyle.PM_SliderThickness), 'SliderThickness', st.pixelMetric(QStyle.PM_SliderThickness)),
            (str(QStyle.PM_SliderControlThickness), 'SliderControlThickness', st.pixelMetric(QStyle.PM_SliderControlThickness)),
            (str(QStyle.PM_SliderLength), 'SliderLength', st.pixelMetric(QStyle.PM_SliderLength)),
            (str(QStyle.PM_SliderTickmarkOffset), 'SliderTickmarkOffset', st.pixelMetric(QStyle.PM_SliderTickmarkOffset)),
            (str(QStyle.PM_SliderSpaceAvailable), 'SliderSpaceAvailable', st.pixelMetric(QStyle.PM_SliderSpaceAvailable)),
            (str(QStyle.PM_DockWidgetSeparatorExtent), 'DockWidgetSeparatorExtent', st.pixelMetric(QStyle.PM_DockWidgetSeparatorExtent)),
            (str(QStyle.PM_DockWidgetHandleExtent), 'DockWidgetHandleExtent', st.pixelMetric(QStyle.PM_DockWidgetHandleExtent)),
            (str(QStyle.PM_DockWidgetFrameWidth), 'DockWidgetFrameWidth', st.pixelMetric(QStyle.PM_DockWidgetFrameWidth)),
            (str(QStyle.PM_DockWidgetTitleMargin), 'DockWidgetTitleMargin', st.pixelMetric(QStyle.PM_DockWidgetTitleMargin)),
            (str(QStyle.PM_MenuBarPanelWidth), 'MenuBarPanelWidth', st.pixelMetric(QStyle.PM_MenuBarPanelWidth)),
            (str(QStyle.PM_MenuBarItemSpacing), 'MenuBarItemSpacing', st.pixelMetric(QStyle.PM_MenuBarItemSpacing)),
            (str(QStyle.PM_MenuBarHMargin), 'MenuBarHMargin', st.pixelMetric(QStyle.PM_MenuBarHMargin)),
            (str(QStyle.PM_MenuBarVMargin), 'MenuBarVMargin', st.pixelMetric(QStyle.PM_MenuBarVMargin)),
            (str(QStyle.PM_ToolBarFrameWidth), 'ToolBarFrameWidth', st.pixelMetric(QStyle.PM_ToolBarFrameWidth)),
            (str(QStyle.PM_ToolBarHandleExtent), 'ToolBarHandleExtent', st.pixelMetric(QStyle.PM_ToolBarHandleExtent)),
            (str(QStyle.PM_ToolBarItemMargin), 'ToolBarItemMargin', st.pixelMetric(QStyle.PM_ToolBarItemMargin)),
            (str(QStyle.PM_ToolBarItemSpacing), 'ToolBarItemSpacing', st.pixelMetric(QStyle.PM_ToolBarItemSpacing)),
            (str(QStyle.PM_ToolBarSeparatorExtent), 'ToolBarSeparatorExtent', st.pixelMetric(QStyle.PM_ToolBarSeparatorExtent)),
            (str(QStyle.PM_ToolBarExtensionExtent), 'ToolBarExtensionExtent', st.pixelMetric(QStyle.PM_ToolBarExtensionExtent)),
            (str(QStyle.PM_TabBarTabOverlap), 'TabBarTabOverlap', st.pixelMetric(QStyle.PM_TabBarTabOverlap)),
            (str(QStyle.PM_TabBarTabHSpace), 'TabBarTabHSpace', st.pixelMetric(QStyle.PM_TabBarTabHSpace)),
            (str(QStyle.PM_TabBarTabVSpace), 'TabBarTabVSpace', st.pixelMetric(QStyle.PM_TabBarTabVSpace)),
            (str(QStyle.PM_TabBarBaseHeight), 'TabBarBaseHeight', st.pixelMetric(QStyle.PM_TabBarBaseHeight)),
            (str(QStyle.PM_TabBarBaseOverlap), 'TabBarBaseOverlap', st.pixelMetric(QStyle.PM_TabBarBaseOverlap)),
            (str(QStyle.PM_TabBarScrollButtonWidth), 'TabBarScrollButtonWidth', st.pixelMetric(QStyle.PM_TabBarScrollButtonWidth)),
            (str(QStyle.PM_TabBarTabShiftHorizontal), 'TabBarTabShiftHorizontal', st.pixelMetric(QStyle.PM_TabBarTabShiftHorizontal)),
            (str(QStyle.PM_TabBarTabShiftVertical), 'TabBarTabShiftVertical', st.pixelMetric(QStyle.PM_TabBarTabShiftVertical)),
            (str(QStyle.PM_ProgressBarChunkWidth), 'ProgressBarChunkWidth', st.pixelMetric(QStyle.PM_ProgressBarChunkWidth)),
            (str(QStyle.PM_SplitterWidth), 'SplitterWidth', st.pixelMetric(QStyle.PM_SplitterWidth)),
            (str(QStyle.PM_TitleBarHeight), 'TitleBarHeight', st.pixelMetric(QStyle.PM_TitleBarHeight)),
            (str(QStyle.PM_IndicatorWidth), 'IndicatorWidth', st.pixelMetric(QStyle.PM_IndicatorWidth)),
            (str(QStyle.PM_IndicatorHeight), 'IndicatorHeight', st.pixelMetric(QStyle.PM_IndicatorHeight)),
            (str(QStyle.PM_ExclusiveIndicatorWidth), 'ExclusiveIndicatorWidth', st.pixelMetric(QStyle.PM_ExclusiveIndicatorWidth)),
            (str(QStyle.PM_ExclusiveIndicatorHeight), 'ExclusiveIndicatorHeight', st.pixelMetric(QStyle.PM_ExclusiveIndicatorHeight)),
            (str(QStyle.PM_MenuPanelWidth), 'MenuPanelWidth', st.pixelMetric(QStyle.PM_MenuPanelWidth)),
            (str(QStyle.PM_MenuHMargin), 'MenuHMargin', st.pixelMetric(QStyle.PM_MenuHMargin)),
            (str(QStyle.PM_MenuVMargin), 'MenuVMargin', st.pixelMetric(QStyle.PM_MenuVMargin)),
            (str(QStyle.PM_MenuScrollerHeight), 'MenuScrollerHeight', st.pixelMetric(QStyle.PM_MenuScrollerHeight)),
            (str(QStyle.PM_MenuTearoffHeight), 'MenuTearoffHeight', st.pixelMetric(QStyle.PM_MenuTearoffHeight)),
            (str(QStyle.PM_MenuDesktopFrameWidth), 'MenuDesktopFrameWidth', st.pixelMetric(QStyle.PM_MenuDesktopFrameWidth)),
            (str(QStyle.PM_HeaderMarkSize), 'HeaderMarkSize', st.pixelMetric(QStyle.PM_HeaderMarkSize)),
            (str(QStyle.PM_HeaderGripMargin), 'HeaderGripMargin', st.pixelMetric(QStyle.PM_HeaderGripMargin)),
            (str(QStyle.PM_HeaderMargin), 'HeaderMargin', st.pixelMetric(QStyle.PM_HeaderMargin)),
            (str(QStyle.PM_SpinBoxSliderHeight), 'SpinBoxSliderHeight', st.pixelMetric(QStyle.PM_SpinBoxSliderHeight)),
            (str(QStyle.PM_ToolBarIconSize), 'ToolBarIconSize', st.pixelMetric(QStyle.PM_ToolBarIconSize)),
            (str(QStyle.PM_SmallIconSize), 'SmallIconSize', st.pixelMetric(QStyle.PM_SmallIconSize)),
            (str(QStyle.PM_LargeIconSize), 'LargeIconSize', st.pixelMetric(QStyle.PM_LargeIconSize)),
            (str(QStyle.PM_FocusFrameHMargin), 'FocusFrameHMargin', st.pixelMetric(QStyle.PM_FocusFrameHMargin)),
            (str(QStyle.PM_FocusFrameVMargin), 'FocusFrameVMargin', st.pixelMetric(QStyle.PM_FocusFrameVMargin)),
            (str(QStyle.PM_IconViewIconSize), 'IconViewIconSize', st.pixelMetric(QStyle.PM_IconViewIconSize)),
            (str(QStyle.PM_ListViewIconSize), 'ListViewIconSize', st.pixelMetric(QStyle.PM_ListViewIconSize)),
            (str(QStyle.PM_ToolTipLabelFrameWidth), 'ToolTipLabelFrameWidth', st.pixelMetric(QStyle.PM_ToolTipLabelFrameWidth)),
            (str(QStyle.PM_CheckBoxLabelSpacing), 'CheckBoxLabelSpacing', st.pixelMetric(QStyle.PM_CheckBoxLabelSpacing)),
            (str(QStyle.PM_RadioButtonLabelSpacing), 'RadioButtonLabelSpacing', st.pixelMetric(QStyle.PM_RadioButtonLabelSpacing)),
            (str(QStyle.PM_TabBarIconSize), 'TabBarIconSize', st.pixelMetric(QStyle.PM_TabBarIconSize)),
            (str(QStyle.PM_SizeGripSize), 'SizeGripSize', st.pixelMetric(QStyle.PM_SizeGripSize)),
            (str(QStyle.PM_MessageBoxIconSize), 'MessageBoxIconSize', st.pixelMetric(QStyle.PM_MessageBoxIconSize)),
            (str(QStyle.PM_ButtonIconSize), 'ButtonIconSize', st.pixelMetric(QStyle.PM_ButtonIconSize)),
            (str(QStyle.PM_TextCursorWidth), 'TextCursorWidth', st.pixelMetric(QStyle.PM_TextCursorWidth)),
            (str(QStyle.PM_TabBar_ScrollButtonOverlap), 'TabBar_ScrollButtonOverlap', st.pixelMetric(QStyle.PM_TabBar_ScrollButtonOverlap)),
            (str(QStyle.PM_TabCloseIndicatorWidth), 'TabCloseIndicatorWidth', st.pixelMetric(QStyle.PM_TabCloseIndicatorWidth)),
            (str(QStyle.PM_TabCloseIndicatorHeight), 'TabCloseIndicatorHeight', st.pixelMetric(QStyle.PM_TabCloseIndicatorHeight)),
            (str(QStyle.PM_ScrollView_ScrollBarSpacing), 'ScrollView_ScrollBarSpacing', st.pixelMetric(QStyle.PM_ScrollView_ScrollBarSpacing)),
            (str(QStyle.PM_ScrollView_ScrollBarOverlap), 'ScrollView_ScrollBarOverlap', st.pixelMetric(QStyle.PM_ScrollView_ScrollBarOverlap)),
            (str(QStyle.PM_SubMenuOverlap), 'SubMenuOverlap', st.pixelMetric(QStyle.PM_SubMenuOverlap)),
            (str(QStyle.PM_TreeViewIndentation), 'TreeViewIndentation', st.pixelMetric(QStyle.PM_TreeViewIndentation)),
            (str(QStyle.PM_HeaderDefaultSectionSizeHorizontal), 'HeaderDefaultSectionSizeHorizontal', st.pixelMetric(QStyle.PM_HeaderDefaultSectionSizeHorizontal)),
            (str(QStyle.PM_HeaderDefaultSectionSizeVertical), 'HeaderDefaultSectionSizeVertical', st.pixelMetric(QStyle.PM_HeaderDefaultSectionSizeVertical)),
            (str(QStyle.PM_CustomBase), 'CustomBase', st.pixelMetric(QStyle.PM_CustomBase))
        )

        self.tw = QTableWidget(len(self.params), 3)
        vh = self.tw.verticalHeader()
        print(vh.sectionSize(0))
        # vh.setSectionResizeMode(QHeaderView.Fixed)
        # vh.setDefaultSectionSize(30)
        for i in range(len(self.params)):
            item1 = QTableWidgetItem (self.params[i][0])
            item2 = QTableWidgetItem (str(self.params[i][1]))
            item3 = QTableWidgetItem (str(self.params[i][2]))
            self.tw.setItem(i, 0, item1)
            self.tw.setItem(i, 1, item2)
            self.tw.setItem(i, 2, item3)
        self.setCentralWidget(self.tw)

        #fm = QFontMetrics(self.tw.font())
        fm = QFontMetrics(self.tw.item(1,1).font())
        #fm = self.tw.fontMetrics()
        strin = ''
        length = 0
        for param in self.params:
            l = fm.size(1, self.tr(param[1])).width()
            if l > length:
                length = l
                strin = self.tr(param[1])
        print('MaxWidth: {0}, for string: {1}'.format(length, strin))
        self.tw.setColumnWidth(1, length)


        appFont = self.app.font()
        cellFont = self.tw.item(1,1).font()
        tableFont = self.tw.font()
        print(appFont)
        print(cellFont)
        print(tableFont)
        print(fm)