Как обновить Maya cmds.GridLayout?

#python #refresh #maya

#python #обновить #maya

Вопрос:

Maya cmds: у меня есть базовая сетка, и я хочу удалить элемент, но сетка не обновляется. Таким образом, удаленный элемент продолжает занимать место. Как я могу обновить или изменить выравнивание его элементов в GridLayout?

 import maya.cmds as cmds

def change(*args):
    cmds.iconTextCheckBox('two', edit=True, visible=False)

window = cmds.window()
cmds.gridLayout()

cmds.iconTextCheckBox('one', style='textOnly', label='item')
cmds.iconTextCheckBox('two', style='textOnly', label='item')
cmds.iconTextCheckBox('three', style='textOnly', label='item')

cmds.button(label='GO', command=change)
cmds.showWindow(window)
  

Комментарии:

1. если я хорошо помню, вы не удаляете элемент, вы просто делаете его невидимым. Теоретически вам придется удалить виджет / элемент из макета с помощью метода QT removeWidget или removeItem, вы также можете удалить виджет или использовать метод модели для его заполнения. Здесь, с maya.cmds, вам, возможно, придется каждый раз заново создавать свою сетку

2. Да, воссоздание сетки каждый раз — это единственное, что работает на данный момент. Но у меня в списке более 1500 элементов. Поэтому, даже если вы просто хотите удалить 10, вам нужно удалить и воссоздать сетку. Что, очевидно, ужасно. Итак, я надеялся, что кто-нибудь может дать мне лучшее решение 🙂 Но также спасибо за ваш вклад!

Ответ №1:

Выполняя свой код, вы не удаляете второй элемент, вы просто отключаете его видимость.

введите описание изображения здесь

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

 cmds.iconTextCheckBox('two', edit=True, visible=True)
  

введите описание изображения здесь

Решение

Вам нужно использовать QGridLayout() класса QT (не Maya cmds). Чтобы удалить виджет из макета, вызовите removeWidget() метод.

Комментарии:

1. Так ты говоришь, что я не могу использовать cmds.gridLayout() ? Потому что не похоже, что есть что-то вроде cmds.gridLayout().removeWidget()

2. Кажется, так. Я не нашел никакого метода для обычных cmds widget . Но я могу ошибаться.

3. ОК. Спасибо за ответ! Я поддержу это, но, к сожалению, на самом деле это не отвечает на мой вопрос. Однако это дает хороший обходной путь. Спасибо!

4. Я все еще пытаюсь решить эту проблему, используя обычный cmds подход)