Maya Python rowColumnLayout backgroundColor также меняет детей - PullRequest
0 голосов
/ 15 апреля 2020

Когда я устанавливаю / изменяю backgroundColor для rowColumnLayout, на детей также влияют.
Как изменить только фон макета?

Пример
Checkerbox-background и font-color различаются при установке синего фона на макете

import maya.cmds as mc
from functools import partial

class Window(object):
    WINDOW_NAME = "Window"
    def __init__(self):
        #-- Check id exists
        if mc.window(self.WINDOW_NAME, exists=True):
            mc.deleteUI(self.WINDOW_NAME, window=True)
        #-- Create Window
        self.win = mc.window(self.WINDOW_NAME, title='Example Window', resizeToFitChildren=True)
        #-- Create UI
        iw = 50
        cmds.columnLayout()
        #-- ROW1
        mc.rowLayout('row1', numberOfColumns = 4)
        mc.button('tst_button1', label='Button1', w=iw )
        mc.textField('tst_textField1', tx='textField1', w=iw*2 )
        mc.colorSliderGrp('tst_colSldGrp1', rgb=([1,0,0]), w=iw )
        mc.checkBox('tst_checkBox1', l='', w=iw/3 )
        mc.setParent( '..' )
        #-- ROW2
        mc.rowLayout('row2', numberOfColumns = 8)
        mc.button('tst_button2', label='Button2', w=iw )
        mc.textField('tst_textField2', tx='textField2', w=iw*2 )
        mc.colorSliderGrp('tst_colSldGrp2', rgb=([1,0,0]), w=iw )
        mc.checkBox('tst_checkBox2', l='', w=iw/3 )
        mc.setParent( '..' )
        #-- ROW3 -- Return to this color scheme after switching
        mc.rowLayout('row3', numberOfColumns = 8)
        mc.button('tst_button3', label='Button3', w=iw )
        mc.textField('tst_textField3', tx='textField3', w=iw*2 )
        mc.colorSliderGrp('tst_colSldGrp3', rgb=([1,0,0]), w=iw )
        mc.checkBox('tst_checkBox3', l='', w=iw/3 )
        mc.text('tst_text3', l='Return to this color scheme after switching' )
        mc.setParent( '..' )
        #-- SWITCH
        mc.button('button_switch', label='Switch Selection', c=partial(self.switch) )
        #-- Show window
        mc.showWindow(self.win)
        #-- Switch Function
        self.active_row = '2'
        self.switch()

    def switch(self, *args):
        def swicth_row_value():
            if self.active_row == '1':
                self.active_row = '2'
            else:
                self.active_row = '1'
            return

        col_active = [0.321, 0.521, 0.651]
        col_passive = [0.267,0.267,0.267]

        mc.rowLayout('row' + self.active_row, e=1, backgroundColor=col_passive)
        swicth_row_value()
        mc.rowLayout('row' + self.active_row, e=1, backgroundColor=col_active)

Window()

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

как то так?

import maya.cmds as mc
from functools import partial

class row_widget():

    def __init__(self, name='row1', parent=None, iw=50, selected=False):

        self.name = name

        self.grey = (.3,.3,.3)
        self.blue = (0.321, 0.521, 0.651)
        self.main_layout_colored = mc.columnLayout(parent=parent, bgc=self.grey, columnAlign="center",
        width=iw*4.7, height=30)
        self.sub_layout = mc.rowLayout(name, numberOfColumns = 4, bgc=self.grey, parent=self.main_layout_colored)

        self.selected = selected

        mc.button('tst_button1', label='Button1', w=iw, parent= self.sub_layout)
        mc.textField('tst_textField1', tx='textField1', w=iw*2, parent= self.sub_layout )
        mc.colorSliderGrp('tst_colSldGrp1', rgb=([1,0,0]), w=iw, parent= self.sub_layout )
        mc.checkBox('tst_checkBox1', l='', w=iw/3, parent= self.sub_layout )

    def set_selected(self, status, *args):
        self.selected = status
        mc.columnLayout(self.main_layout_colored , e=True, bgc=self.color)
        mc.rowLayout(self.name, edit=True, bgc=self.grey)        

    @property
    def color(self):
        if self.selected:
            return self.blue
        else:
            return self.grey


class Window(object):
    WINDOW_NAME = "Window"
    row_widget_list = []
    def __init__(self):
        #-- Check id exists
        if mc.window(self.WINDOW_NAME, exists=True):
            mc.deleteUI(self.WINDOW_NAME, window=True)
        #-- Create Window
        self.win = mc.window(self.WINDOW_NAME, title='Example Window', resizeToFitChildren=True)
        #-- Create UI
        iw = 50
        main_layout = cmds.columnLayout()
        #-- ROW1
        self.row1 = row_widget('row1', main_layout)
        #-- ROW2
        self.row2 = row_widget('row2', main_layout)
        #-- ROW3 -- Return to this color scheme after switching
        self.row3 = row_widget('row3', main_layout)

        #-- SWITCH
        mc.button('button_switch', label='Switch Selection', c=self.switch, parent=main_layout)
        #-- Show window
        mc.showWindow(self.win)
        #-- Switch Function
        self.active_row = '2'
        self.switch()

    def switch(self, *args):

        col_active = [0.321, 0.521, 0.651]
        col_passive = [0.267,0.267,0.267]

        if self.active_row == 1:
            self.row1.set_selected(True)
            self.row2.set_selected(False)
            self.active_row = 2
        else:
            self.row2.set_selected(True)
            self.row1.set_selected(False) 
            self.active_row = 1       

Window()
0 голосов
/ 23 апреля 2020

Работает .. Не уверен, что это лучшее решение ..

import maya.cmds as mc
from functools import partial

class Window(object):
    WINDOW_NAME = "Window"
    def __init__(self):
        #-- Create Window
        if mc.window(self.WINDOW_NAME, exists=True):
            mc.deleteUI(self.WINDOW_NAME, window=True)
        self.win = mc.window(self.WINDOW_NAME, title='Example Window', resizeToFitChildren=True)
        #-- Create UI
        self.num_rows = 5
        cmds.columnLayout()
        for i in range(self.num_rows):
            mc.rowLayout('rowKeeper' + str(i), numberOfColumns = 1)
            self.create_row( str(i), False )
            mc.setParent('..')
        #-- Button
        mc.button('button_switch', label='Switch Selection', c=partial(self.switch) )
        #-- Show Window
        mc.showWindow(self.win)
        #-- Switch Function
        self.active_row = 0
        self.switch()

    def create_row(self, row, active):
        iw = 50
        rowBgc = [0.267,0.267,0.267]
        if active:
            rowBgc = [0.321, 0.521, 0.651]

        mc.rowLayout('row' + row, numberOfColumns = 4, bgc=rowBgc)
        mc.button('tst_button' + row, label='Button' + row, w=iw, bgc=[0.364,0.364,0.364] )
        mc.textField('tst_textField' + row, tx='textField' + row, w=iw*2, bgc=[0.168,0.168,0.168] )
        mc.colorSliderGrp('tst_colSldGrp' + row, rgb=([1,0,0]), w=iw )
        mc.checkBox('tst_checkBox' + row, l='', bgc=[0.364,0.364,0.364] )
        mc.setParent( '..' )

    def switch(self, *args):
        def offset_row_value():
            self.active_row += 1
            self.active_row = self.active_row % self.num_rows

        def rebuild_row(active):
            mc.setParent( 'rowKeeper' + str(self.active_row) )
            cmds.deleteUI( 'row' + str(self.active_row) )
            self.create_row( str(self.active_row), active )

        rebuild_row(False) #-- Reset old row
        offset_row_value()
        rebuild_row(True) #-- Highlight new row

Window()
...