如何在Python Maya中存储floatSliderGrp的值

时间:2017-04-23 08:41:05

标签: python maya uislider getvalue

我有一个从1到10的滑块,我希望每次都存储用户使用滑块选择的值。我希望通过滑块的移动更新值。这就是我到目前为止所拥有的

def PrintValue():
    print value

cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, 
value=0 ,dc=PrintValue(PASSVALUE) )

我想传递PASSVALUE参数所在的值,有没有办法从滑块中获取值?

2 个答案:

答案 0 :(得分:2)

'值'是floatSliderGrp的标志 - 不是变量。这就是为什么你不能直接打印它的原因。

根据您的目标,您可以通过两种方式继续前进。

  1. 您可以存储您已创建的控件的名称,然后在其他功能中询问该值。您可以使用partial将控件名称绑定到函数,或者只需重新排序创建它们的方式,以便创建函数,知道它们关注的UI元素的名称。在这种情况下,您不会在滑块上放置命令,但是需要知道滑块值的其他内容
  2. 您可以创建变量并在滑块值更改时更新它。如果许多不同的工具需要知道该值,一个好的选择是创建一个类并将滑块值戳入其中。然后其他代码可以抓住值而不关心UI。如果您想在滑块更改时在场景中执行某些操作,则可以更改update_slider_value()功能,以便在移动滑块时执行操作。
  3. 这里的方法#1。它并没有尝试将dc事件挂钩到滑块上 - 它只记住滑块对象的名称,并在需要知道时查询该值:

     wnd = cmds.window()
     col = cmds.columnLayout()
     slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0)
     b = cmds.button('print value')
     # since this is defined after `slider`, it knows the value 
     def print_value(*_):
         print cmds.floatSliderGrp(slider, q=True, v=True)
     cmds.button(b, e=True, c=print_value)
     cmds.showWindow(wnd)
    

    这与使用方法#2完成同样的事情:

    class SliderWindow(object):
    
        def __init__(self):
            self.value = 0
            self.window = cmds.window(title ="SliderWindow")
            self.column = cmds.columnLayout()
            self.slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0, dc= self.update_slider_value)
            cmds.button('print value', c= self.print_value)
            cmds.showWindow(self.window)
    
        def update_slider_value(self, *_):
            self.value = cmds.floatSliderGrp(self.slider, q=True, v=True)
    
    
        def print_value(self, *_):
            print self.value
    
    example = SliderWindow()
    

    任何知道example的人都可以询问example.value并获取当前的滑块值。这对于更复杂的情况很有用,但对于简单的东西来说却是过度的。

    相关信息:Extending SSIS Part 2 - SSIS Programmatically / Dynamically Building Packages

答案 1 :(得分:1)

使用模块:部分

private void GrdVw_Reception_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
            if (GrdVw_Reception.CurrentCellAddress.X == 0)
            {

                if (Convert.ToBoolean(GrdVw_Reception.Rows[e.RowIndex].Cells[0].Value) == false)
                {
                    GrdVw_Reception.Rows[e.RowIndex].Cells[0].Value = CheckState.Checked;
                }
                else
                {
                    GrdVw_Reception.Rows[e.RowIndex].Cells[0].Value = CheckState.Unchecked;
                }

                int UpTpOne = 0;

                bool flag = false;

                for (int i = 0; i < GrdVw_Reception.Rows.Count; i++)
                {
                    if (Convert.ToBoolean(GrdVw_Reception.Rows[i].Cells["checkColumn"].Value) == true)
                    {
                        UpTpOne++;

                        if (UpTpOne == 1)
                        {
                            flag = true;
                        }
                        else
                        {
                            flag = false;
                        }

                    }
                }

                if (UpTpOne == 0)
                {
                    Btn_DelRecord.Visible = false;

                }
                else
                {
                    Btn_DelRecord.Visible = true;
                }

                if (flag == true)
                {
                    Btn_Edit.Visible = true;
                }
                else
                {
                    Btn_Edit.Visible = false;
                }
            }
        }

--- ---- EDIT 这是另一篇同样问题的帖子

How to create Maya sliders to move objects in interface