python - PyQt5 无法使用 InputMask 清除字段
问题描述
我在放置输入掩码的 QTableView 上遇到 QLineEdit 问题。我遇到的问题是,一旦将值放入其中,我就无法清除该字段。删除输入掩码允许我清除该字段。我的代码:
import sys
from PyQt5.Qt import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class PhnDataModel(QStandardItemModel):
sig_loaded = pyqtSignal()
def __init__(self, parent=None):
super(PhnDataModel, self).__init__(parent)
def newItem(self, xpos, ypos, display, data=None):
item = QStandardItem()
item.setData(display, Qt.DisplayRole)
if data != None:
item.setData(data, Qt.UserRole)
self.setItem(xpos, ypos, item)
def loadModel(self):
self.clear()
for ndx in range(4):
self.newItem(ndx, 1, ["Office", "Fax", "Mobile", "Other"][ndx], ndx)
self.newItem(ndx, 0, "")
self.newItem(ndx, 2, "")
self.sig_loaded.emit()
class PhnDataDelegate(QStyledItemDelegate):
def initStyleOption(self, option, index):
super(PhnDataDelegate, self).initStyleOption(option, index)
if index.column() == 2:
option.text = index.data()
option.displayAlignment = Qt.AlignVCenter | Qt.AlignHCenter
def paint(self, painter, option, index):
if index.column() == 1:
option.font.setWeight(QFont.Bold)
option.palette.setColor(QPalette.Text, QColor(0, 51, 0))
QStyledItemDelegate.paint(self, painter, option, index)
def createEditor(self, parent, option, index):
if index.column() == 2:
editor = QLineEdit(parent)
editor.setInputMask("(999) 999-9999")
return editor
QStyledItemDelegate.createEditor(self, parent, option, index)
class PhnDataBrowse(QTableView):
def __init__(self, parent=None):
super(PhnDataBrowse, self).__init__(parent)
self.setGeometry(QRect(5, 5, 286, 111))
self.setDragDropOverwriteMode(False)
self.setAlternatingRowColors(True)
self.setSelectionMode(QAbstractItemView.SingleSelection)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.setCornerButtonEnabled(False)
self.horizontalHeader().setVisible(False)
self.verticalHeader().setVisible(False)
self.horizontalHeader().setStretchLastSection(True)
self.model = PhnDataModel()
self.model.sig_loaded.connect(self.__loaded)
self.setItemDelegate(PhnDataDelegate())
def __loaded(self):
self.setModel(self.model)
self.setColumnHidden(0, True)
self.resizeRowsToContents()
self.selectRow(0)
class testWindow(QDialog):
def __init__(self, parent=None):
super(testWindow, self).__init__(parent)
self.layout = QVBoxLayout(self)
self.phndata = PhnDataBrowse()
self.layout.addWidget(self.phndata)
self.save_btn = QPushButton()
self.save_btn.setText("Save")
self.layout.addWidget(self.save_btn)
self.phndata.model.loadModel()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
win = testWindow()
win.show()
sys.exit(app.exec_())
看起来好像 inputMask 期望该字段为非空白或零。我该如何绕过这个障碍?
解决方案
看起来我遇到的问题是使用 (999) 999-9999 而不是 (000) 000-0000。问题是固定的。
推荐阅读
- swift - 如何通过swift在普通类中创建事件?
- javascript - 在 axios 请求处理时防止用户刷新或退出
- powershell - 如何在 Powershell 中使用变量将对象/OU 路径替换为 LDAPFilter
- matlab - MATLAB fminunc 停止,因为它不能减少目标公式?
- c++ - 折叠表达式与编译递归
- javascript - 数据表:使用剥离的 HTML 进行列搜索
- node.js - 如何使用node-postgres插入一列值等于数组的行
- json - 通过 sed 将 JSON 中的撇号替换为适合 curl 的撇号
- async-await - 在 Kephas 中调用异步函数时,PreserveThreadContext() 是什么?
- python - 如何在不计算 Python 中的重复值的情况下进行分组和求和