Изменение цвета фона (BG c) windows в майя? - PullRequest
1 голос
/ 04 марта 2020

Я работал где-то в прошлом, когда у нас было открыто несколько сессий Maya, цвет фона можно было менять случайным образом, поэтому, когда вы быстро переключались из сеанса, было легко определить, какое окно принадлежит тому или иному сеансу Maya.

И до сих пор я могу изменить bg c основного интерфейса с помощью:

window -e bgc 0.5 0.5 0.5 $gMainWindow;

После поиска других глобальных переменных я нашел $ All Windows, $ CommandWindow, среди прочего, поскольку в документации указано, что 'bg c' является флагом windows only. Я не могу изменить ни один из цветов в любом окне, кроме $ gCommandWindow, которое выскочило, и я не помню, чтобы видел его раньше.

Я надеюсь, по крайней мере, изменить окно редактора сценариев в дополнение в MainWindow, если кто-нибудь знает, возможно ли это или нет? Это не критично для миссии, но теперь мне интересно посмотреть, можно ли это сделать.

Спасибо!

1 Ответ

2 голосов
/ 04 марта 2020

Поскольку интерфейс Maya использует Qt, вы можете использовать мощность PySide для настройки любого виджета, который вы хотите. Обычно единственная сложная задача - найти нужный виджет для изменения.

Вот как можно настроить редактор сценариев, чтобы он получил желтую рамку:

import shiboken2
from maya import cmds
from maya import OpenMayaUI
from PySide2 import QtWidgets


panels = cmds.getPanel(scriptType="scriptEditorPanel")  # Get all script editor panel names.

if panels:  # Make sure one actually exists!
    script_editor_ptr = OpenMayaUI.MQtUtil.findControl(panels[0])  # Grab its pointer with its internal name.
    script_editor = shiboken2.wrapInstance(long(script_editor_ptr), QtWidgets.QWidget)  # Convert pointer to a QtWidgets.QWidget
    editor_win = script_editor.parent().parent().parent().parent()  # Not very pretty but found that this was the best object to color with. Needed to traverse up its parents.
    editor_win.setObjectName("scriptEditorFramePanel")  # This object originally had no internal name, so let's set one.
    editor_win.setStyleSheet("#scriptEditorFramePanel {border: 3px solid rgb(150, 150, 45);}")  # Set its styleSheet with its internal name so that it doesn't effect any of its children.

OpenMayaUI.MQtUtil дает вам потрясающая возможность найти любой элемент управления по имени, поэтому, если вы знаете имя виджета, который хотите изменить, вы можете его найти (иногда сложно найти его!). В этом случае мне пришлось пройтись по нескольким родителям, чтобы найти того, кто работал лучше всего, чтобы очертить все окно. Вы можете поиграть с этим и покрасить, скажем, только текстовую область. А поскольку это таблицы стилей PySide, вы можете делать все, что душе угодно, например, изменять цвет фона, толщину контуров и т. Д.

Поскольку мы влияем только на таблицу стилей это также не сохранит с настройками и вернется к тому, что было в новом сеансе.

Надеюсь, это поможет.

Example

...