我用一些資料初始化我的表格,并且單元格是可編輯的。資料訪問和寫入由模型處理。如果單元格中的現有資料是整數,那么 QTableView 似乎不允許我輸入小數(甚至不能輸入點作為小數分隔符)。如果現有資料是小數,那么我可以輸入小數。
如何設定表格以便始終輸入小數,即使現有值是整數?
有關此類表的示例,請參見下面的腳本。
import typing
from sys import argv
from PyQt5.QtWidgets import QTableView, QApplication, QVBoxLayout, QFrame
from PyQt5.Qt import QAbstractTableModel, QModelIndex, Qt
app = QApplication(argv)
base = QFrame()
layout = QVBoxLayout(base)
base.setLayout(layout)
table = QTableView(base)
layout.addWidget(table)
data = [[10, 100],
[20.5, 200]]
class Model(QAbstractTableModel):
def columnCount(self, parent: QModelIndex = ...) -> int:
return 2
def rowCount(self, parent: QModelIndex = ...) -> int:
return 2
def flags(self, index: QModelIndex) -> Qt.ItemFlags:
return Qt.ItemIsEnabled | Qt.ItemIsEditable
def data(self, index: QModelIndex, role: int = ...) -> typing.Any:
return data[index.row()][index.column()]
def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool:
data[index.row()][index.column()] = float(value)
return True
model = Model()
table.setModel(model)
base.show()
exit(app.exec_())
uj5u.com熱心網友回復:
只需通過在 int 值后添加“.0”來使用浮點型別的值初始化資料變數即可:
資料 = [[10.0, 100.0], [20.5, 200.0]]
這是您想要的最終代碼:
import typing
from sys import argv
from PyQt5.QtWidgets import QTableView, QApplication, QVBoxLayout, QFrame
from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt
app = QApplication(argv)
base = QFrame()
layout = QVBoxLayout(base)
base.setLayout(layout)
table = QTableView(base)
layout.addWidget(table)
data = [[10.0, 100.0],
[20.5, 200.0]]
class Model(QAbstractTableModel):
def columnCount(self, parent: QModelIndex = ...) -> int:
return 2
def rowCount(self, parent: QModelIndex = ...) -> int:
return 2
def flags(self, index: QModelIndex) -> Qt.ItemFlags:
return Qt.ItemIsEnabled | Qt.ItemIsEditable
def data(self, index: QModelIndex, role: int = ...) -> typing.Any:
return data[index.row()][index.column()]
def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool:
data[index.row()][index.column()] = float(value)
return True
model = Model()
table.setModel(model)
base.show()
exit(app.exec_())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/487709.html
