#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
подход)