如何检查PyQt TableModelView中传递的值是否为整数而不是例如字母/符号?

时间:2017-04-20 01:15:09

标签: python pyqt

我对Python相对较新,尤其是PyQt和模型视图编程。我想拥有它,以便有人只能在我的表中输入整数而不是字母/符号等。这是我迄今为止为tableView小部件制作的模型:

class PixelTableModel(QtCore.QAbstractTableModel):

    def __init__(self):
        super(PixelTableModel, self).__init__()
        self.pixel_coordinate = [[None, None, None, None]]

    def rowCount(self, parent):
        return 1

    def columnCount(self, parent):
        return 4

    def flags(self, index):
        return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

    def setData(self, index, value, role = QtCore.Qt.EditRole):
        if role == QtCore.Qt.EditRole:
            row = index.row()
            column = index.column()
            self.pixel_coordinate[row][column] = value
            print(self.pixel_coordinate) #testing
            return True

        return False


    def data(self, index, role):
       if role == QtCore.Qt.DisplayRole:
           row = index.row()
           column = index.column()
           value = self.pixel_coordinate[row][column]
           return value



    def headerData(self, section, orientation, role): # section = row column, orientation = vertical/horizontal
        if role == QtCore.Qt.DisplayRole:
            if orientation == QtCore.Qt.Horizontal:
                dict = {0: "Xstart", 1: "Ystart", 2: "Xmax", 3: "Ymax"}
                for key in dict:
                    if section == key:
                        return dict[key]
            else:
                return "Pixel coordinate"

它似乎工作,但显然对于仍然可以在tableView中将字母/符号作为输入的部分。我在setData()方法中尝试了一些东西,但似乎无法使它工作,总是得到某种类型的错误,甚至根本不会更改框。感谢任何可以帮助我的人。也很抱歉英语不好。

1 个答案:

答案 0 :(得分:0)

对于任何仍然感兴趣的人,在经过它之后再次使用简单的尝试修复它,除了块:

def setData(self, index, value, role = QtCore.Qt.EditRole):
    if role == QtCore.Qt.EditRole:
        try:
            row = index.row()
            column = index.column()
            string_to_int = int(value)
            self.pixel_coordinate[row][column] = value
            print(self.pixel_coordinate) #testing
            return True

        except ValueError:
            print("Not a number")
            return False

    return False