eric7/EricWidgets/EricPasswordMeter.py

Thu, 30 Dec 2021 11:17:58 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 30 Dec 2021 11:17:58 +0100
branch
eric7
changeset 8881
54e42bc2437a
parent 8358
144a6b854f70
permissions
-rw-r--r--

Updated copyright for 2022.

# -*- coding: utf-8 -*-

# Copyright (c) 2011 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a custom widget indicating the strength of a password.
"""

from PyQt6.QtWidgets import QProgressBar

from Utilities.PasswordChecker import PasswordChecker


class EricPasswordMeter(QProgressBar):
    """
    Class implementing a custom widget indicating the strength of a password.
    """
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget (QWidget)
        """
        super().__init__(parent)
        
        super().setTextVisible(False)
        super().setMaximum(100)
        self.__increment = 100 // (PasswordChecker.Complexity_VeryStrong + 1)
        
        self.__indicatorColors = [
            "#ff0000",      # red
            "#ff8800",      # orange
            "#ffff00",      # yellow
            "#ccff00",      # yellow green
            "#00ff00",      # green
        ]
        self.__noIndicator = "#ffffff"
        
        self.__styleSheetTemplate = (
            "QProgressBar {{"
            " border: 2px solid black;"
            " border-radius: 5px;"
            " text-align: center; }}"
            "QProgressBar::chunk:horizontal {{"
            " background-color: {0}; }}"
        )
        self.setStyleSheet(
            self.__styleSheetTemplate.format(self.__noIndicator))
    
    def checkPasswordStrength(self, password):
        """
        Public slot to check the password strength and update the
        progress bar accordingly.
        
        @param password password to be checked (string)
        """
        strength = PasswordChecker().checkPassword(password)
        self.setStyleSheet(self.__styleSheetTemplate.format(
            self.__indicatorColors[strength]))
        super().setValue(
            (strength + 1) * self.__increment)
    
    def setValue(self, value):
        """
        Public method to set the value.
        
        Overwritten to do nothing.
        
        @param value value (integer)
        """
        pass
    
    def setMaximum(self, value):
        """
        Public method to set the maximum value.
        
        Overwritten to do nothing.
        
        @param value maximum value (integer)
        """
        pass
    
    def setMinimum(self, value):
        """
        Public method to set the minimal value.
        
        Overwritten to do nothing.
        
        @param value minimum value (integer)
        """
        pass

if __name__ == "__main__":
    import sys
    from PyQt6.QtWidgets import QApplication
    
    app = QApplication(sys.argv)
    meter = EricPasswordMeter()
    meter.show()
    meter.checkPasswordStrength("Blah2+")
    app.exec()

eric ide

mercurial