Запрос в представлении таблицы - программирование модели / представления - PullRequest
0 голосов
/ 16 марта 2011

Я практикую некоторые примеры программирования вида модели и у меня возникает вопрос, почему цвета не представлены правильно.

Код выглядит следующим образом:

Я создал табличное представление

table_view = QTableView()
table_view.show()
table_view.setModel(model)

test_data = data(4,5)
model = paletteTableview(test_data)

class paletteTableview(QAbstractTableModel):
def __init__(self, test_data, parent=None):
    super(paletteTableview, self).__init__(parent)
    self.__test_data = test_data


def rowCount(self, parent):
    return len(self.__test_data)

def columnCount(self, parent):
    return len(self.__test_data[0])

    def data(self,index,role):

    if role == Qt.DisplayRole:

        row = index.row()
        column = index.column()
        value = self.__test_data[row][column]
        return value



    if role == Qt.DecorationRole:
        row = index.row()
        column = index.column()

        value = self.__test_data[row][column]
        #print value

        value = QColor(value)
        #print value
        pixmap = QPixmap(26,26)
        pixmap.fill(value)

        icon = QIcon(pixmap)
        return icon


def data(row,column):
test_data = []
k = "FF0000"
temp_data= []
for i in range(row):
    for j in range(column):
        list = ['#']
        for a in k:
            list.append(a)
            d = ''.join(list)
        temp_data.append(d)
        c  = int(k,16)
        c = c + 1
        k = "%X" % c
    test_data.append(temp_data)
    temp_data = []
return test_data

Я что-то здесь упускаю ?? пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 16 марта 2011

Я проверяю ваш код, и нет проблем, но цвета на моем дисплее почти одинаковы. Я думаю, что вы можете столкнуться с той же проблемой, которая, кажется, все цвета красного без какой-либо четкой разницы. Я предлагаю использовать другой способ генерации цветовых данных (возврат по функции «data»).
Я даю весь свой тестовый код, вы можете запустить и попытаться найти что-то полезное для вас. Он может работать нормально, используя pyqt 4.8.3.1 для python2.7 в моей системе win7.

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class paletteTableview(QAbstractTableModel):
    def __init__(self, test_data, parent=None):
        super(paletteTableview, self).__init__(parent)
        self.__test_data = test_data

    def rowCount(self, parent):
        return len(self.__test_data)

    def columnCount(self, parent):
        return len(self.__test_data[0])

    def data(self,index,role):
        if role == Qt.DisplayRole:

            row = index.row()
            column = index.column()
            value = self.__test_data[row][column]
            return value


        if role == Qt.DecorationRole:
            row = index.row()
            column = index.column()

            value = self.__test_data[row][column]
            print "data:" , index.row() , index.column() , value
            #print value

            value = QColor(value)
            #print value
            pixmap = QPixmap(26,26)
            pixmap.fill(value)

            icon = QIcon(pixmap)
            return icon


class MainWindow(QMainWindow):
    def __init__( self  , parent = None ):
        super( MainWindow , self ).__init__(parent)

        self.tv = QTableView(self)
        self.dm = paletteTableview( data( 4 , 5 ) )
        self.tv.setModel( self.dm )
        self.setCentralWidget(self.tv)


def data(row,column):
    import random

    test_data = []
    temp_data= []
    for i in range(row):
        for j in range(column):
            temp_data.append( "#%06X" % random.randint( 0 , 0xFFFFFF ) )
        test_data.append(temp_data)
        temp_data = []
    return test_data


def main():
    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()
...