You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何锁定LineEdit的冒号,仅编辑MAC地址的XX部分?

实现锁定冒号的MAC地址输入框(QLineEdit)

假设你使用的是PyQt(Python主流GUI框架之一)的QLineEdit组件,下面是两种直接有效的实现方案:


1. 利用QLineEdit内置输入掩码(最简便)

QLineEdit的setInputMask()方法可以直接固定格式中的冒号,强制用户仅在XX位置输入十六进制字符,且自动限制总输入字符数为12。

代码示例

from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QVBoxLayout
import sys

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QWidget()
    window.setLayout(QVBoxLayout())

    # 创建MAC地址输入框
    mac_edit = QLineEdit()
    # 设置输入掩码:HH代表十六进制字符,固定冒号分隔,下划线为占位符
    mac_edit.setInputMask("HH:HH:HH:HH:HH:HH;_")
    window.layout().addWidget(mac_edit)

    window.show()
    sys.exit(app.exec_())

效果说明

  • 输入框自动显示__:__:__:__:__:__的占位格式
  • 用户只能在__位置输入十六进制字符(0-9、A-F、a-f),冒号无法编辑或删除
  • 输入满12个有效字符后,输入框自动停止接受新输入

2. 自定义验证器(增强合法性校验)

如果需要更严格的输入控制(比如强制大写、过滤非法粘贴内容),可以配合自定义QValidator增强校验逻辑,和输入掩码搭配使用:

代码示例

from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QVBoxLayout
from PyQt5.QtGui import QValidator
import sys

class MACValidator(QValidator):
    def validate(self, input_str, pos):
        # 过滤格式中的冒号,仅校验有效输入字符
        clean_input = input_str.replace(":", "")
        # 校验规则:仅允许大写十六进制字符,总长度不超过12
        if all(c in "0123456789ABCDEF" for c in clean_input) and len(clean_input) <= 12:
            return (QValidator.Acceptable, input_str.upper(), pos)
        elif len(clean_input) > 12:
            return (QValidator.Invalid, input_str, pos)
        else:
            return (QValidator.Intermediate, input_str.upper(), pos)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QWidget()
    window.setLayout(QVBoxLayout())

    mac_edit = QLineEdit()
    mac_edit.setInputMask("HH:HH:HH:HH:HH:HH;_")
    # 添加自定义验证器,强制输入大写十六进制字符
    mac_edit.setValidator(MACValidator())

    window.layout().addWidget(mac_edit)
    window.show()
    sys.exit(app.exec_())

效果说明

  • 自动将输入的小写字母转为大写
  • 拒绝非十六进制字符的输入
  • 配合输入掩码,完全锁定冒号的位置和格式

获取最终MAC地址

如果需要提取纯字符(不带冒号):

clean_mac = mac_edit.text().replace(":", "")

如果需要带格式的MAC地址,直接调用mac_edit.text()即可。

内容的提问来源于stack exchange,提问作者user21379959

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:57:31