Репликация Maya QLineEdits с цветными метками - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь создать / реплицировать виджет QLineEdit с теми, которые мы видим в Maya (где у него есть цветная метка слева, которая обозначает, введен он или нет)

Я возможность реплицировать его в определенной степени, но в то же время возникают некоторые проблемы:

  • См. прикрепленный, между моим значком и левым внешним элементом QLineEdit, есть небольшой разрыв
  • Размер значка не прямоугольный angular -i sh, как я и ожидал, несмотря на то, что фактическое изображение масштабируется в 10x16 пикселей.

Вот краткий пример кода моего QLineEdit:

my_icon = QtGui.QPixmap('full_keyed.png')
self.ui.positionXLineEdit.addAction(my_icon, QtWidgets.QLineEdit.LeadingPosition)

Итак, лучше ли мне достичь того, чего я хотел достичь, как это было видно в майя?

enter image description here

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Используя widgetHierarchy.py , вы можете узнать, что эти "ключевые" поля в ChannelBox являются частью QTableView и, следовательно, QStyledItemDelegates .

Боюсь, у меня нет личного опыта работы с ними, но после небольшой копки похоже, что эти QStyledItemDelegates - это то, что вы хотите смоделировать ваши элементы управления после. Посмотрите, что выводится при запросе к QStyledItemDelegates itemData ():

{0: u'Translate X', 2: u'Translate X', 3: u'Translate X', 6: <PySide2.QtGui.QFont( "smallPlainLabelFont,12,-1,5,50,0,0,0,0,0" )  at 0x7f8d2070ab48>, 7: 66, 8: <PySide2.QtGui.QBrush(QColor(ARGB 1, 0.266667, 0.266667, 0.266667),SolidPattern)  at 0x7f8d2070ab00>, 9: <PySide2.QtGui.QBrush(QColor(ARGB 1, 0.733333, 0.733333, 0.733333),SolidPattern)  at 0x7f8d2070ac68>}
{0: u'0 ', 2: u'0 ', 3: u'0 \n\nKeyed On Frame', 6: <PySide2.QtGui.QFont( "smallPlainLabelFont,12,-1,5,50,0,0,0,0,0" )  at 0x7f8d2070ac68>, 7: 65, 8: <PySide2.QtGui.QBrush(QColor(ARGB 1, 0.803922, 0.152941, 0.160784),SolidPattern)  at 0x7f8d2070ab48>, 9: <PySide2.QtGui.QBrush(QColor(ARGB 1, 0, 0, 0.00784314),SolidPattern)  at 0x7f8d2070a3f8>}

ChannelBox Exmaple

Первая строка представляет itemData для метки «Перевести X», а вторая - заполняет фактическое поле ввода И маркер «с ключом».

0 голосов
/ 08 февраля 2020

Я действительно нашел метод.

Кроме того, я должен был упомянуть, что мои виджеты создаются с использованием Qt Designers, и поэтому использование QStyledItemDelegate не может быть идеальным решением для меня.

Так я в настоящее время реализовал функции «цветовой кодировки» в своем GUI:

def set_color_labelling(self):
    # There is a method I have written to check if the said attribute has any
    # keys to begin with.

    # `color_val` are as follows:
    # solid red - If it is keyed and current time is on the actual key
    # solid pink - If it is keyed but current time is not on any of the keys
    # none - If the attribute has no keys at all
    color_val = check_for_keys()

    lineedit_stylesheet = """QLineEdit{{
        border:0px; border-left: 5px {0}; padding-left: 3px}}
    """.format(color_val)

    # However for non-animated channels, the stylesheet context will be slightly
    # different. This is so that the offset/ spaces for numbering will remains
    # at the same position as when it is animated. If not, the positioning will
    # be towards the left hand border.
    if color_val == "none":
        lineedit_stylesheet = """QLineEdit{
            border-left: 5px none; padding-left: 8px}
        """
...