2014-06-25 234 views
0

嗨,我從qtdesigner創建了2個文件,並且我創建了一個新的文件,並在其中創建了一個我想要使用這些UI的類。pyqt向QListWidget添加一個小部件

這是嘗試從PyQt4的進口QtCore,QtGui 創建QListWidget
文件: _fromUtf8 = QtCore.QString.fromUtf8 除AttributeError的: _fromUtf8 =拉姆達S:小號

class Ui_main_Dialog_lists(object): 
    def setupUi(self, main_Dialog_lists): 
     main_Dialog_lists.setObjectName(_fromUtf8("main_Dialog_lists")) 
     main_Dialog_lists.resize(590, 521) 
     self.main_verticalLayout = QtGui.QVBoxLayout(main_Dialog_lists) 
     self.main_verticalLayout.setObjectName(_fromUtf8("main_verticalLayout")) 
     self.horizontalLayout = QtGui.QHBoxLayout() 
     self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) 
     self.listWidget_nodes = QtGui.QListWidget(main_Dialog_lists) 
     self.listWidget_nodes.setObjectName(_fromUtf8("listWidget_nodes")) 
     self.horizontalLayout.addWidget(self.listWidget_nodes) 
     self.label_arrow = QtGui.QLabel(main_Dialog_lists) 
     self.label_arrow.setObjectName(_fromUtf8("label_arrow")) 
     self.horizontalLayout.addWidget(self.label_arrow) 
     self.listWidget_nodes_to_render = QtGui.QListWidget(main_Dialog_lists) 
     self.listWidget_nodes_to_render.setObjectName(_fromUtf8("listWidget_nodes_to_render")) 
     self.horizontalLayout.addWidget(self.listWidget_nodes_to_render) 
     self.main_verticalLayout.addLayout(self.horizontalLayout) 

     self.retranslateUi(main_Dialog_lists) 
     QtCore.QMetaObject.connectSlotsByName(main_Dialog_lists) 

    def retranslateUi(self, main_Dialog_lists): 
     main_Dialog_lists.setWindowTitle(QtGui.QApplication.translate("main_Dialog_lists", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_arrow.setText(QtGui.QApplication.translate("main_Dialog_lists", ">", None, QtGui.QApplication.UnicodeUTF8)) 

這是創建窗口小部件的類,我想插入到QListWidget的行中

from PyQt4 import QtCore, QtGui 
try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

class Ui_Frame_nodes(object):  
    def setupUi(self, Frame_nodes): 
     Frame_nodes.setObjectName(_fromUtf8("Frame_nodes")) 
     Frame_nodes.resize(508, 128) 
     Frame_nodes.setFrameShape(QtGui.QFrame.StyledPanel) 
     Frame_nodes.setFrameShadow(QtGui.QFrame.Raised) 
     self.verticalLayout_2 = QtGui.QVBoxLayout(Frame_nodes) 
     self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) 
     self.horizontalLayout_names = QtGui.QHBoxLayout() 
     self.horizontalLayout_names.setObjectName(_fromUtf8("horizontalLayout_names")) 
     self.label_node = QtGui.QLabel(Frame_nodes) 
     self.label_node.setObjectName(_fromUtf8("label_node")) 
     self.horizontalLayout_names.addWidget(self.label_node) 
     self.label_name_start = QtGui.QLabel(Frame_nodes) 
     self.label_name_start.setObjectName(_fromUtf8("label_name_start")) 
     self.horizontalLayout_names.addWidget(self.label_name_start) 
     self.label_name_end = QtGui.QLabel(Frame_nodes) 
     self.label_name_end.setObjectName(_fromUtf8("label_name_end")) 
     self.horizontalLayout_names.addWidget(self.label_name_end) 
     self.label_name_inter = QtGui.QLabel(Frame_nodes) 
     self.label_name_inter.setObjectName(_fromUtf8("label_name_inter")) 
     self.horizontalLayout_names.addWidget(self.label_name_inter) 
     self.verticalLayout_2.addLayout(self.horizontalLayout_names) 
     self.horizontalLayout_Inputs = QtGui.QHBoxLayout() 
     self.horizontalLayout_Inputs.setObjectName(_fromUtf8("horizontalLayout_Inputs")) 
     self.label_node_name = QtGui.QLabel(Frame_nodes) 
     self.label_node_name.setObjectName(_fromUtf8("label_node_name")) 
     self.horizontalLayout_Inputs.addWidget(self.label_node_name) 
     self.lineEdit_node_start = QtGui.QLineEdit(Frame_nodes) 
     self.lineEdit_node_start.setObjectName(_fromUtf8("lineEdit_node_start")) 
     self.horizontalLayout_Inputs.addWidget(self.lineEdit_node_start) 
     self.lineEdit = QtGui.QLineEdit(Frame_nodes) 
     self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 
     self.horizontalLayout_Inputs.addWidget(self.lineEdit) 
     self.lineEdit_3 = QtGui.QLineEdit(Frame_nodes) 
     self.lineEdit_3.setObjectName(_fromUtf8("lineEdit_3")) 
     self.horizontalLayout_Inputs.addWidget(self.lineEdit_3) 
     self.verticalLayout_2.addLayout(self.horizontalLayout_Inputs) 

     self.retranslateUi(Frame_nodes) 
     QtCore.QMetaObject.connectSlotsByName(Frame_nodes) 

    def retranslateUi(self, Frame_nodes): 
     Frame_nodes.setWindowTitle(QtGui.QApplication.translate("Frame_nodes", "Frame", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_node.setText(QtGui.QApplication.translate("Frame_nodes", "Node", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_name_start.setText(QtGui.QApplication.translate("Frame_nodes", "Start", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_name_end.setText(QtGui.QApplication.translate("Frame_nodes", "End", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_name_inter.setText(QtGui.QApplication.translate("Frame_nodes", "Inter", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_node_name.setText(QtGui.QApplication.translate("Frame_nodes", "Node Name", None, QtGui.QApplication.UnicodeUTF8)) 

在編譯2個.ui文件後,我創建了這個文件,我試圖使用它們,所以我可以把一個放在另一個裏面。

import lists 
import nodes 

from PyQt4 import QtCore, QtGui 
import sys 

class Master(QtGui.QFrame, QtGui.QWidget, nodes.Ui_Frame_nodes): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     QtGui.QFrame.__init__(self) 

     self.ui = lists.Ui_main_Dialog_lists() 
     self.ui.setupUi(self) 

     for i in range(2): 
      item_widget = nodes.Ui_Frame_nodes() 
      qframe = QtGui.QFrame() 
      item_widget.setupUi(qframe) 

      wid2 = QtGui.QListWidgetItem() 
      self.ui.listWidget_nodes.addItem(wid2) 
      #here is where the script doesnt like it 
      self.ui.listWidget_nodes.setItemWidget(wid2, item_widget) 

app = QtGui.QApplication(sys.argv) 
m = Master() 
m.show() 
app.exec_() 

,但我不能讓它在setItemWidget我得到一個錯誤說 類型錯誤:QListWidget.setItemWidget(QListWidgetItem,QWidget中):參數2具有意外類型「Ui_Frame_nodes」

這是我第一次嘗試把一個部件放在另一個裏面我不確定我是否正確地做了。

謝謝你們 而這裏的UI https://dl.dropboxusercontent.com/u/14346803/ui_qt_designer.png

+0

你能解釋一下你試圖完成什麼嗎?你正在瞄準什麼功能? – Shadow9043

+0

我正在試圖將我的小部件放入qlistwidget中,它們表示將代表nuke節點(一個圖像合成器軟件)3 – pelos

回答

0

你的問題的圖像可能是您正確尚未設置節點。我認爲它正在嘗試初始化爲一個python對象(而不是Qt)。我目前無法對此進行測試。

你可能需要類似:

class CustomNodes(QWidget): 
    def __init__(self, parent=None): 
     super(CustomNodes, self).__init__(parent) 

     self.ui = nodes.Ui_Frame_nodes() 
     self.ui.setupUi(self) 

然後使用:

item_widget = CustomNodes(qframe) 
self.ui.listWidget_nodes.setItemWidget(wid2, item_widget) 

請注意:我沒有測試過此代碼。