Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QComboBox和应用程序设置样式(“cleanlooks”)_Python_Qt_Pyqt - Fatal编程技术网

Python QComboBox和应用程序设置样式(“cleanlooks”)

Python QComboBox和应用程序设置样式(“cleanlooks”),python,qt,pyqt,Python,Qt,Pyqt,下面的代码创建一个指定了QAbstractTableModel模型的QComboBox。奇怪的是,如果app.setStyle(“cleanlooks”)被注释掉,那么当点击QCombo时,它不会下拉菜单。有没有任何关于为什么会发生这种情况的建议 在linux(Ubuntu14.04 lts)上,您的代码在这两种情况下都能工作。在我的windows 7上,即使未注释掉app.setStyle(“cleanlooks”),它在任何情况下都不起作用 由于QCombobox只显示一维列表,没有二维表

下面的代码创建一个指定了
QAbstractTableModel
模型的
QComboBox
。奇怪的是,如果
app.setStyle(“cleanlooks”)
被注释掉,那么当点击QCombo时,它不会下拉菜单。有没有任何关于为什么会发生这种情况的建议

在linux(Ubuntu14.04 lts)上,您的代码在这两种情况下都能工作。在我的windows 7上,即使未注释掉
app.setStyle(“cleanlooks”)
,它在任何情况下都不起作用

由于QCombobox只显示一维列表,没有二维表,我想问题是由二维表模型或其索引引起的

我尝试了QStandarditemodel,它在linux和Windows7上都能工作。它通过userroles访问items中的其他列,并添加第三列来显示它

class tableModel(QtGui.QStandardItemModel):
    def __init__(self, parent=None, *args):
        QtGui.QStandardItemModel.__init__(self, parent, *args)
        self.items = [['Item_A000', '10','abcd'],['Item_B001', '20','efgh'],['Item_A002', '30','ijkl'],['Item_B003', '40','mnop'],['Item_B004', '50','qrst']] 
        for i in range(0,len(self.items)):
            item = QtGui.QStandardItem()
            item.setData(self.items[i][0],2)                # displayrole
            item.setData(self.items[i][1],256)              # userrole
            item.setData(self.items[i][2],257)              # userrole
            self.appendRow(item)

    def currentChanged(self, index):
        print('itemdata[0] :', self.data(self.index(index,0),2), '; itemdata[1] :', self.data(self.index(index,0), 256), '; itemdata[2]: ', self.data(self.index(index,0),257))


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    # app.setStyle("cleanlooks")
    tModel=tableModel()   
    combobox = QtGui.QComboBox()    # widget)
    combobox.setModel(tModel
    combobox.currentIndexChanged.connect(combobox.model().currentChanged)
    combobox.show()       

    sys.exit(app.exec_()) 

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

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

def data(self, index, role):
    if not index.isValid() or role != QtCore.Qt.DisplayRole: return
我想你会发现它解决了你眼前的问题。
大概是因为没有使用装饰或处理方式不同,所以它使用的是干净的外观。

您在哪个平台上?什么版本的Qt?什么python?Windows7上的python 2.7。PySide.uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;PySide.版本信息:(1,2,2,'最终',0);PySide.QtCore.uuuu版本:4.8.6;PySide.QtCore.\uuuuuuuu版本\uuuuuuu信息:(4,8,6)
def data(self, index, role):
    if not index.isValid() or role != QtCore.Qt.DisplayRole: return