Wo mache ich den Fehler?
Verfasst: Sonntag 24. Mai 2020, 12:59
Hallo, ich fange gerade an mich in meiner Freizeit mit Python zu beschäftigen. Als Übung wollte ich mal ein Programm schreiben, welches einem zufällige Passwörter generiert. Die von mir als erstes angefertigte Version für das Terminal funktioniert ganz gut. Nun wollte ich mit PyQt5 eine GUI zu demselben Programm zu erstellen (teilweise auch mit QtDesigner). Nun kommt aber als Ausgabe im Terminal meist nur Whitespace oder meine eigene Fehlermeldung. Nun frage ich mich wo ich denn etwas falsch mache. Hier der Code:
für die GUI:
und hier für die Passwort-Funktion:
für die GUI:
Code: Alles auswählen
from PyQt5 import QtCore, QtGui, QtWidgets
from def_global import Password
class Ui_mainWindow(object):
def __init__(self):
self.letters = "n"
self.digits = "n"
self.punctuation = "n"
def setupUi(self, mainWindow):
mainWindow.setObjectName("mainWindow")
mainWindow.resize(652, 422)
self.centralwidget = QtWidgets.QWidget(mainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label_top = QtWidgets.QLabel(self.centralwidget)
self.label_top.setGeometry(QtCore.QRect(10, 20, 161, 16))
self.label_top.setObjectName("label_top")
self.spin_box_num = QtWidgets.QSpinBox(self.centralwidget)
self.spin_box_num.setGeometry(QtCore.QRect(10, 240, 65, 32))
self.spin_box_num.setMinimum(1)
self.spin_box_num.setProperty("value", 10)
self.spin_box_num.setObjectName("spin_box_num")
self.check_letters = QtWidgets.QCheckBox(self.centralwidget)
self.check_letters.setGeometry(QtCore.QRect(10, 100, 111, 22))
self.check_letters.setObjectName("check_letters")
self.check_digits = QtWidgets.QCheckBox(self.centralwidget)
self.check_digits.setGeometry(QtCore.QRect(10, 130, 101, 22))
self.check_digits.setObjectName("check_digits")
self.check_punctuation = QtWidgets.QCheckBox(self.centralwidget)
self.check_punctuation.setGeometry(QtCore.QRect(10, 160, 111, 22))
self.check_punctuation.setObjectName("check_punctuation")
self.label_num_chars = QtWidgets.QLabel(self.centralwidget)
self.label_num_chars.setGeometry(QtCore.QRect(10, 210, 151, 20))
self.label_num_chars.setObjectName("label_num_chars")
self.btn_create = QtWidgets.QPushButton(self.centralwidget)
self.btn_create.setGeometry(QtCore.QRect(550, 360, 88, 34))
self.btn_create.setObjectName("btn_create")
self.label_sel_chars = QtWidgets.QLabel(self.centralwidget)
self.label_sel_chars.setGeometry(QtCore.QRect(10, 60, 311, 18))
self.label_sel_chars.setAcceptDrops(False)
self.label_sel_chars.setObjectName("label_sel_chars")
self.label_password = QtWidgets.QLabel(self.centralwidget)
self.label_password.setGeometry(QtCore.QRect(10, 310, 621, 18))
self.label_password.setText("")
self.label_password.setObjectName("label_password")
mainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(mainWindow)
self.statusbar.setObjectName("statusbar")
mainWindow.setStatusBar(self.statusbar)
self.retranslateUi(mainWindow)
QtCore.QMetaObject.connectSlotsByName(mainWindow)
self.char_num = self.spin_box_num.value
self.btn_create.clicked.connect(lambda _: self.create_password(self.char_num))
def retranslateUi(self, mainWindow):
_translate = QtCore.QCoreApplication.translate
mainWindow.setWindowTitle(_translate("mainWindow", "Password Generator"))
self.label_top.setText(_translate("mainWindow", "Create a new passoword."))
self.check_letters.setText(_translate("mainWindow", "Letters"))
self.check_digits.setText(_translate("mainWindow", "Digits"))
self.check_punctuation.setText(_translate("mainWindow", "Punctuation"))
self.label_num_chars.setText(_translate("mainWindow", "Number of characters:"))
self.btn_create.setText(_translate("mainWindow", "Create"))
self.label_sel_chars.setText(_translate("mainWindow", "Select the characters the password should contain."))
def create_password(self, char_num):
"""Creates the password"""
if self.check_letters.isChecked():
self.letters = "y"
if self.check_letters.isChecked():
self.digits = "y"
if self.check_punctuation.isChecked():
self.punctuation = "y"
password = Password(char_num, self.letters, self.digits, self.punctuation)
print(password)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
mainWindow = QtWidgets.QMainWindow()
ui = Ui_mainWindow()
ui.setupUi(mainWindow)
mainWindow.show()
sys.exit(app.exec_())
Code: Alles auswählen
import secrets, string
class Password:
def __init__(self, char_num:int=10, letters:str = "n", digits:str="n", punctuation:str = "n"):
self.char_num = char_num
self.password_list = []
self.password = ""
self.chars = []
if letters == "y":
for char in string.ascii_letters:
self.chars.append(char)
if digits == "y":
for char in string.digits:
self.chars.append(char)
if punctuation == "y":
for char in string.punctuation:
self.chars.append(char)
if letters != "y" and digits != "y" and punctuation != "y":
print("Error. You need to add at least one type of characters to your password.")
exit()
def create(self) -> str:
"""Creates the password"""
for char in range(self.char_num):
char = secrets.choice(self.chars)
self.password_list.append(char)
self.password = "".join(self.password_list)
return self.password
def __repr__(self):
return self.password