将UI中的值映射到QTreeWidget列

时间:2015-03-02 03:54:57

标签: python maya qtreewidget

对不起,如果我的下面的问题听起来很愚蠢,但我几乎是迷失方向!

我使用Qt-Designer创建了2个UI。

以下是主要代码: 主要代码 - http://pastebin.com/mbg2fuvh

我正在使用以下命令在Maya中运行它:

import sys
sys.path.insert(0, '/user_data/test')
import UI_test
reload(UI_test)
win = UI_test.MigrationUi()
win.show()

所以基本上我在这里想要实现的是我在Sub UI中输入的值没有将值映射到主UI上。 要复制案例:

  1. 运行执行代码
  2. 选择我已在搜索过滤器QTreeWidget中插入的2个项目中的任何一项,然后单击“添加所选项”,将其转移到迁移ANMG QTreeWidget中
  3. 在Migrate ANMG QTreeWidget中选择一个项目,然后单击Edit Selected按钮
  4. 尝试在3个字段中输入一些单词等 - 描述/评论/版本评论
  5. 我原以为如果单击OK按钮,它会将值映射到列中,但似乎不是那种情况,尽管我在Qt Designer中为{{1}设置了一个信号/槽} / accepted()

    非常感谢任何指针...

1 个答案:

答案 0 :(得分:1)

我已经实施了两个解决方案,您需要对代码进行评论/取消注释。结果在两种情况下都是相同的。

解决方案1基于您在PublishInfoUI类中使用的资产的引用。按下"确定"后,修改将在PublishInfoUI上的self.assets课程内完成。

在解决方案2的另一面,按下"确定",它会创建一个新的QTableWidgetItem,然后将其设置为MigrationUI类。然后在这个类中进行修改。

IMO,如果你将getValues重命名为updateValues或类似的东西,我更喜欢第一个解决方案。但正如我所说,结果在两种情况下都是相同的。

class MigrationUi(QtGui.QWidget):

    ### Some stuff

    def editSelected(self):
        selected_item = self.ui.treeWidget_migrateAnmg.currentItem()

        if selected_item:
            inputWin = PublishInfoUI(selected_item)
            ############################
            # Here is the core modifications
            if inputWin.exec_(): #Triggered if we press "OK"
                #Solution 1:
                inputWin.getValues()
                #End solution 1

                #Solution 2:
                returnedAsset = inputWin.getValues()
                print "Returned asset: "
                print returnedAsset.text(0)
                print returnedAsset.text(1)
                print returnedAsset.text(2)
                print returnedAsset.text(3)
                print returnedAsset.text(4)
                print returnedAsset.text(5)
                print returnedAsset.text(6)
                print returnedAsset.text(7)
                print returnedAsset.text(8)
                selected_item.setText(6, returnedAsset.text(6) )
                selected_item.setText(7, returnedAsset.text(7) )
                selected_item.setText(8, returnedAsset.text(8) )
                #End solution 2
            else:
                print "Canceled/closed operation"
            ############################
        else:
            cmds.warning("Please select an item in ANMG field")


    def slotCancel(self):
        self.close()


class PublishInfoUI(QtGui.QDialog):

    def __init__(self, asset, parent = None, modal = False):
        QtGui.QWidget.__init__(self, parent, modal = modal)

        self.ui = publishInfoUI_test.Ui_PublishInfo()
        self.ui.setupUi(self)
        self.assets = asset

        self.fill_details()

    def fill_details(self):
        self.ui.lineEdit_rigUsed.setText(self.assets.text(0))
        self.ui.lineEdit_anmLocation.setText(self.assets.text(5))
        self.ui.textEdit_comment.setText(self.assets.text(7))

    def getValues(self):
        #Solution 1:
        #Do the modification here
        self.assets.setText(6, self.ui.lineEdit_description.text() )
        self.assets.setText(7, self.ui.textEdit_comment.toPlainText() )
        self.assets.setText(8, self.ui.textEdit_Vcomment.toPlainText() )
        #End solution 1

        #Solution2:
        #Return a new asset and do the modification in MigrationUi class
        assetToReturn = QtGui.QTreeWidgetItem()
        assetToReturn.setText(6, self.ui.lineEdit_description.text() ) #Feel free to add more infos if necessary
        assetToReturn.setText(7, self.ui.textEdit_comment.toPlainText() )
        assetToReturn.setText(8, self.ui.textEdit_Vcomment.toPlainText() )
        return assetToReturn
        #End solution 2