QComboBox和app.setStyle(“cleanlooks”)

时间:2015-08-13 20:40:48

标签: python qt pyqt

以下代码会创建一个QComboBox,并指定QAbstractTableModel模型。奇怪的是,如果app.setStyle("cleanlooks")被注释掉,QCombo在点击它时不会拉下它的菜单。有什么建议为什么会发生?

enter image description here

from PyQt import QtGui, QtCore
class tableModel(QtCore.QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QtCore.QAbstractTableModel.__init__(self, parent, *args)
        self.items = [['Item_A000', '10'],['Item_B001', '20'],['Item_A002', '30'],['Item_B003', '40'],['Item_B004', '50']] 

    def rowCount(self, parent=QtCore.QModelIndex()):
        return len(self.items)  
    def columnCount(self, parent=QtCore.QModelIndex()):
        return 2  

    def data(self, index, role):
        if not index.isValid(): return 
        row=index.row()
        column=index.column()
        return self.items[row][column]

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    # app.setStyle("cleanlooks")

    tModel=tableModel()    

    combobox = QtGui.QComboBox()
    combobox.setModel(tModel)
    combobox.show()       

    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

这听起来很奇怪,但问题是因为您的模型for方法为data以外的其他角色返回的值不正确。可能DisplayRole但我不确定 - 你需要做更多测试才能确定,但​​无论如何你的代码都不正确。

您需要将数据方法第一行测试更改为:

DecorationRole

我认为您会发现这可以解决您的问题。 据推测,它正在使用CleanLooks,因为装饰没有被使用,或者处理不同。