Использование переменных в строке - особенно таблицы стилей в Python / Maya - PullRequest
0 голосов
/ 05 марта 2020

Это продолжение вопроса, который у меня возник по поводу изменения цвета в интерфейсе Maya. Мне посчастливилось получить отличную информацию, и продолжая упражнение, я пытался добавить переменную для значения с плавающей точкой RGB в таблицу стилей.

Я изучил кучу и понял, что по сути пытался использовать int или float в строке, поэтому я сделал случайный список переменных с плавающей точкой, которые я думал, что мог бы использовать для свойства "color" вместо "rgb". До сих пор ни одна попытка объединить данные с помощью .format я не мог заставить его работать. По-прежнему ищу ответы, но решил спросить, может ли кто-нибудь указать мне правильное направление.

gMainWindow = maya.mel.eval('$tmpVar=$gMainWindow')
import random
import shiboken2
from maya import cmds
from maya import OpenMayaUI
from PySide2 import QtWidgets
from PySide2.QtCore import *
from PySide2.QtWidgets import *

def clamp(num, min_value, max_value):
   return max(min(num, max_value), min_value)

r = random.randrange(0,255)
g = random.randrange(0,255)
b = random.randrange(0,255)
rgb = [r,g,b]

colorRGB = ['Red', 'White', 'Blue']
color2= random.choice(colorRGB)

window = cmds.window(gMainWindow, edit=True, backgroundColor=(r,g,b))

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: 13px solid rgb(155,155,155);}")  # Set its styleSheet with its internal name so that it doesn't effect any of its children.
    editor_win.setStyleSheet("scriptEditorFramePanel {border: 13px solid color{0}}".format(color2) 

Я специально пытаюсь изменить эту строку:

editor_win.setStyleSheet("scriptEditorFramePanel {border: 13px solid rgb(155,155,155);}") 

Я могу вручную назначайте цвета либо изменяя значения RGB, либо устанавливая «color: (имя цвета)», но я подумал, что было бы интересно посмотреть, как я могу использовать переменные в такой строке.

Спасибо! Alex

1 Ответ

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

Ваша проблема связана с буквенными фигурными скобками в строке, которые путаются с теми, которые окружают значение заполнителя. Вам нужно заменить их двумя скобками подряд, чтобы python считал их буквальной скобкой:

 editor_win.setStyleSheet("scriptEditorFramePanel {{border: 13px solid color{0}}}".format(color2) 
...