关于表视图的查询 - 模型/视图编程
我正在练习一些关于模型-视图编程的例子,但我有个问题,为什么颜色没有正确显示。
我的代码如下:
我创建了一个表格视图
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
我测试了你的代码,没有发现问题,但在我的显示器上颜色几乎是一样的。我觉得你可能也遇到了同样的问题,似乎所有的颜色都是红色,没有明显的区别。我建议你换一种方法来生成颜色数据(通过“data”函数返回)。
我把我的完整测试代码给你,你可以运行一下,看看能不能找到对你有用的东西。在我的win7系统下,使用pyqt 4.8.3.1和python2.7可以正常运行。
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()