-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinterface.py
More file actions
97 lines (78 loc) · 29.9 KB
/
interface.py
File metadata and controls
97 lines (78 loc) · 29.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from PyQt5.QtWidgets import QPushButton
from PyQt5 import QtGui, QtWidgets
from PyQt5.QtCore import QSettings, Qt
from licensa import *
import base64
import sys
icon_base64 = "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888/Z8WKFaxbt46DBw+ajiUu0aFDByZOnEjDhg1NR5EgabT3pHgVACVUAHhTcXExCxYsYM6cOcydO5fvvvvOllnhEl1SUlJ49tlneeKJJ4iLizMdR0KgAuCkuHhAn2bQczyP2bZtG5MmTWLUqFH8+OOPpuOIi/Xv35+//e1v1KpVy3QUsUFqaqrpCG4RrwKghEYAol9OTg6TJ09m7NixLFy4UEuB5JyaN2/OiBEjuP76601HERvpy95JGgE4QcN60ev48eOMGjWKV199lV27dpmOIy7XvHlznnrqKW6//Xb9XIhCKgBO0gjACcXFxaYjiM2OHTvGv/71L1555RV++ukn03HE5XTj9wYVACfFaQJgCSfXC0t4+Xw+Ro8eze9+9zv27dtnOo64WFJSEjfffDNDhgyhZ8+exMbGmo4kDktMTDQdwTXigSK0EkAjAFFiw4YN3H///XzxxRemo4iLXXLJJQwZMoSBAwdqG3CP0QjASUUqAEqEehKYmJWTk8OIESP485//TH5+vuk44jKpqal0796d3r1706tXL+rVq2c6kohphScKAM/TI4DItWzZMm699VY2b95sOoq4QGxsLI0aNaJ169a0a9eOK664grZt22p4XwB92TtFkQqAEsePHzcdQYIwfvx47rvvPnJycsJ2zerVq5OWlkZ6ejppaWlUqFCBpCTtqB1OiYmJlC9fnvLly1OlShWqV69ORkYGDRo0oF69enrOK2XSl72TCuMBlUOgvdwjzJEjRxg+fDiTJ0927BqJiYl07tyZDh060LRpU5o3b07Tpk21k5hIBNMIwElFKgBKqACIHD/88AM33HADGzZssL3vFi1acM0119CrVy+6du2qQ6JEooxGAE4qjAdyTadwAx0PGRmWLVvGtddea+vyvkqVKjFw4ECGDh1K+/btbetXRNxHBcBJOfFA+B6euphGANxv3rx59O3b17b/ry666CKeeuop+vXrp2f4Ih6hL3sn5cQDmv2GdQysuNeUKVMYPHgweXl5IffVokULnnzySe34JuJBWVlZpiO4xXEVACUOHjxIQUGBDgVyoQkTJnDXXXeFfExv7dq1ef311+nfvz8xMTE2pRORSKIRgJOOx6JHAIC1fay2jXWfuXPnMmzYsJBu/rGxsQwfPpw1a9Zwyy236OYv4mEaATgpJxaNAJy0d+9e0xHkFN988w03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"
class LicenseWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Python SaS")
self.setFixedSize(300, 140)
#icone
icon_data = base64.b64decode(icon_base64)
image_icon = QtGui.QImage.fromData(icon_data)
icon = QtGui.QIcon(QtGui.QPixmap.fromImage(image_icon))
self.setWindowIcon(icon)
settings = QSettings("settings.ini", QSettings.IniFormat)
self.textbox_state = settings.value("serial", "", type=str)
# Criação dos widgets
label_link = QtWidgets.QLabel(self)
label_link.setOpenExternalLinks(True)
label_link.setTextFormat(Qt.RichText)
label_link.setText('<a href="https://example.com/">Adquira sua licença</a>')
label = QtWidgets.QLabel("Insira o código de licença:")
self.textbox = QtWidgets.QLineEdit()
self.textbox.setText(self.textbox_state) # define a opção selecionada
self.textbox.textChanged.connect(self.salvar_opcoes) # conecta o sinal currentIndexChanged para salvar as opções
button = QPushButton("Confirmar")
# Configuração do layout
layout = QtWidgets.QVBoxLayout()
layout.addWidget(label_link)
layout.addWidget(label)
layout.addWidget(self.textbox)
layout.addWidget(button)
self.setLayout(layout)
# Variável de instância para a janela principal
self.main_window = None
# Conexão do botão de confirmação com o método de validação
button.clicked.connect(self.validate_license)
def salvar_opcoes(self):
settings = QSettings("settings.ini", QSettings.IniFormat)
self.textbox_state = self.textbox.text()
settings.setValue("serial", self.textbox_state)
def validate_license(self):
# Verificação do código de licença
license_code = self.textbox.text()
key = str(self.textbox.text())
success, expiration_date = Authkey(key)
if success:
expiration_date_formatted = expiration_date.strftime('%d-%m-%Y %H:%M:%S')
#print(expiration_date_formatted)
QtWidgets.QMessageBox.information(self, "Python SaS", "Sucesso !\nA licença inserida é válida.\nIrá expirar: " + expiration_date_formatted)
# Código de licença válido, fechar a janela de licença e abrir a janela principal
self.main_window = MainWindow()
self.main_window.showMaximized()
self.close()
else:
QtWidgets.QMessageBox.critical(self, "Python SaS", "Erro de Autenticação\nA licença inserida é inválida.")
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Interface Principal")
self.setGeometry(100, 100, 400, 300)
# Criar um widget central e definir o layout
central_widget = QtWidgets.QWidget(self)
layout = QtWidgets.QVBoxLayout(central_widget)
# Adicionar o label ao layout do widget central
label = QtWidgets.QLabel("Aqui Está Sua Interface")
layout.addWidget(label)
# Definir o widget central da QMainWindow
self.setCentralWidget(central_widget)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
# Criação da janela de licença
license_window = LicenseWindow()
license_window.show()
sys.exit(app.exec_())