Maya Python rowColumnLayout backgroundColor 也发生变化 children
Maya Python rowColumnLayout backgroundColor also changes children
当我 set/Change rowColumnLayout 的 backgroundColor 时 children 也会受到影响。
如何只改变布局的背景?
Example
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()
成功了..不确定它是否是最佳解决方案..
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()
是这样的吗?
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()
当我 set/Change rowColumnLayout 的 backgroundColor 时 children 也会受到影响。
如何只改变布局的背景?
Example
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()
成功了..不确定它是否是最佳解决方案..
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()
是这样的吗?
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()