将 UI 中的值映射到 QTreeWidget 列
Map values from an UI into QTreeWidget Column
抱歉,如果我的以下问题听起来很愚蠢,但我几乎迷失了方向!
我使用 Qt-Designer 创建了 2 UIs。
- 主要 UI (anmgToolUI) - http://pastebin.com/raw.php?i=eXVWj99Q
- 子 UI (publishInfoUI) - http://pastebin.com/raw.php?i=KsnJC8wR
下面是主要代码:
主要代码 - 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 中键入的值没有将值映射到 Main UI。
要复制案例:
- 运行执行代码
- Select 我已经在搜索过滤器 QTreeWidget 中插入的 2 个项目中的任何一个,然后单击 "Add Selected",它将在其中将其传输到 Migrate ANMG QTreeWidget
- Select 迁移 ANMG QTreeWidget 中的一个项目并单击编辑 Selected 按钮
- 尝试在 3 个字段中的任何一个中输入一些词等 - 描述/评论/版本评论
我原以为如果我单击 OK
按钮,它会将值映射到列中,但似乎并非如此,尽管我在 Qt Designer 中设置了 signal/slot对于 accepted()
/ accept()
非常感谢任何指点...
我已经实施了两个解决方案,您需要 comment/uncomment 代码。两种情况下的结果是一样的。
解决方案 1 基于您在 PublishInfoUI
class 中使用的资产的参考。一旦您按下 "OK",修改将在 PublishInfoUI
class 内完成 self.assets
。
另一方面,在解决方案 2 中,一旦您按下 "OK",它就会创建一个新的 QTableWidgetItem
,然后将其返回给您的 MigrationUI
class。然后在这个class.
中进行修改
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
抱歉,如果我的以下问题听起来很愚蠢,但我几乎迷失了方向!
我使用 Qt-Designer 创建了 2 UIs。
- 主要 UI (anmgToolUI) - http://pastebin.com/raw.php?i=eXVWj99Q
- 子 UI (publishInfoUI) - http://pastebin.com/raw.php?i=KsnJC8wR
下面是主要代码: 主要代码 - 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 中键入的值没有将值映射到 Main UI。 要复制案例:
- 运行执行代码
- Select 我已经在搜索过滤器 QTreeWidget 中插入的 2 个项目中的任何一个,然后单击 "Add Selected",它将在其中将其传输到 Migrate ANMG QTreeWidget
- Select 迁移 ANMG QTreeWidget 中的一个项目并单击编辑 Selected 按钮
- 尝试在 3 个字段中的任何一个中输入一些词等 - 描述/评论/版本评论
我原以为如果我单击 OK
按钮,它会将值映射到列中,但似乎并非如此,尽管我在 Qt Designer 中设置了 signal/slot对于 accepted()
/ accept()
非常感谢任何指点...
我已经实施了两个解决方案,您需要 comment/uncomment 代码。两种情况下的结果是一样的。
解决方案 1 基于您在 PublishInfoUI
class 中使用的资产的参考。一旦您按下 "OK",修改将在 PublishInfoUI
class 内完成 self.assets
。
另一方面,在解决方案 2 中,一旦您按下 "OK",它就会创建一个新的 QTableWidgetItem
,然后将其返回给您的 MigrationUI
class。然后在这个class.
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