2014-01-25 2 views
0

Этот код будет показывать только одно изображение в той же строке. Как я могу передать другой путь для изображения в ImageDelegate? БлагодаряИспользование делегата для изображения в qtableview pyqt4 python?

class testQT4(QtGui.QTableView): 
    def __init__(self, parent=None): 
     QtGui.QTableView.__init__(self, parent) 
     self.setItemDelegateForColumn(1, ImageDelegate(parent)) 


     #table header 
     header = [ 'ID','image'] 
     tabledata = [[1,2],[3,4]] 
     #create table model 
     self.model = MyTableModel(tabledata, header, self) 
     #set table model 
     self.setModel(self.model) 


class ImageDelegate(QtGui.QStyledItemDelegate): 

    def __init__(self, parent): 
     print dir(self) 
     QtGui.QStyledItemDelegate.__init__(self, parent) 

    def paint(self, painter, option, index):   

     painter.fillRect(option.rect, QtGui.QColor(191,222,185)) 

     # path = "path\to\my\image.jpg" 
     self.path = "image.bmp" 

     image = QtGui.QImage(str(self.path)) 
     pixmap = QtGui.QPixmap.fromImage(image) 
     pixmap.scaled(50, 40, QtCore.Qt.KeepAspectRatio) 
     painter.drawPixmap(option.rect, pixmap) 

ответ

0

В методе краски делегата вы имеете доступ к модели с помощью index.model(). Затем вы можете запросить свою модель для данных (изображений), которые вы хотите показать. Например, используя Qt.UserRole для функции data модели.

Другим решением, которое может быть проще, является то, что функция данных модели может вернуть один из QIcon, QPixmap, QImage и QColor для Qt.DecorationRole. В этом случае Делегат не нужен.

В качестве примера следующий код поместит в иконе в (только) поле таблицы:

from PyQt4 import QtGui, QtCore 
import PyQt4.uic 

# using QtDesigner to just put a TableView in a Widget 
Form, Base = PyQt4.uic.loadUiType(r'TableView.ui') 

class TableModel(QtCore.QAbstractTableModel): 
    def __init__(self, parent=None): 
     super(TableModel,self).__init__(parent) 

    def rowCount(self, parent=QtCore.QModelIndex()): 
     return 1 

    def columnCount(self, parent=QtCore.QModelIndex()): 
     return 1 

    def data(self, index, role): 
     if index.isValid(): 
      if role==QtCore.Qt.DecorationRole: 
       return QtGui.QIcon("ChipScope.png") 
     return None 


class TableViewUi(Form, Base): 
    def __init__(self, parent=None): 
     Form.__init__(self) 
     Base.__init__(self,parent) 

    def setupUi(self, parent): 
     Form.setupUi(self,parent) 
     model = TableModel() 
     self.tableView.setModel(model) 

if __name__=="__main__": 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = TableViewUi() 
    ui.setupUi(ui) 
    MainWindow.setCentralWidget(ui) 
    MainWindow.show() 
    sys.exit(app.exec_()) 
Смежные вопросы