Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

python 3.x - How validate a cell in QTableWidget?

I work eith pyqt4 in python3.4 I want to validate if the text in the cell is a float number when it is introduced. How I do that?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You have two options.

You can create a QItemDelegate and override the createEditor, setEditorData and setModelData to control the widget they're presented with to edit the data. You can create a QLineEdit with a validator if you'd like, but if they can only enter a number, you should probably just use a QSpinBox or QDoubleSpinBox, which only allow integers and floats. Alternatively, you could let them enter whatever they want and then in the setModelData function just ignore any entered values that aren't valid numbers.

class MyDelegate(QtGui.QItemDelegate):

    def createEditor(self, parent, option, index):
        return QtGui.QSpinBox(parent)


delegate = MyDelegate()
table.setItemDelegate(delegate)

Or, a slightly easier solution if the items in your table already have numbers, just assign an integer or float to the EditData role for the item. Qt will notice the class type and automatically construct a QSpinBox or QDoubleSpinBox for you.

item = QTableWidgetItem()
item.setData(QtCore.Qt.EditRole, 5)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...