Python:当项目用于存储对象(数据)时,如何处理可编辑的组合框

2024-09-28 03:21:02 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码创建一个包含12个下拉项的简单组合框。每个项目都分配了一个MyClass()的实例-变量myObject使用

self.ComboBox.addItem( name, myObject ).

组合框本身被设置为“可编辑”,使用

self.ComboBox.setEditable(True)

由于组合框是可编辑的,用户可以直接双击组合框并输入一个新的文本项,该文本项将成为新组合框的下拉项。问题是键入到组合框中的文本只是一个字符串(而所有其他组合框项都处理了.setData()。有没有办法确保即使是“键入”组合框项也会分配myClass实例?在

^{pr2}$

Tags: 项目实例代码name文本selftrue编辑
1条回答
网友
1楼 · 发布于 2024-09-28 03:21:02

这是对我有效的解决方案。在

from PyQt4 import QtGui, QtCore
import sys, os

class MyClass(object):
    def __init__(self):
        super(MyClass, self).__init__()
        self.myAttr=None
    def getTime(self):
        import datetime
        return datetime.datetime.now() 

class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(QtGui.QMainWindow,self).__init__()

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()
        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)

        self.ComboBox = QtGui.QComboBox() 
        self.ComboBox.setEditable(True)
        for i in range(12):
            name='Item '+str(i)
            myObject=MyClass()
            self.ComboBox.addItem( name, myObject )


        self.ComboBox.currentIndexChanged.connect(self.combobox_selected)
        myBoxLayout.addWidget(self.ComboBox)

    def combobox_selected(self, index):
        itemName=self.ComboBox.currentText()
        myObject=self.ComboBox.itemData(index).toPyObject()

        if not hasattr(myObject, 'getTime'):
            result=self.ComboBox.blockSignals(True)
            self.ComboBox.removeItem(index)
            myObject=MyClass()
            self.ComboBox.addItem( itemName, myObject )
            self.ComboBox.setCurrentIndex( index )
            self.ComboBox.blockSignals(False)

        print myObject.getTime()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dialog_1 = Dialog_01()
    dialog_1.show()
    dialog_1.resize(480,320)
    sys.exit(app.exec_())

相关问题 更多 >

    热门问题