class Principal(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.inicializar_db() self.setWindowTitle("Tião Automecânica - Clientes") self.widget = QWidget() # Janelas w1, w2 = Buscador(), NovoCliente() w1.status_signal.connect(self.atualizar_status) w2.status_signal.connect(self.atualizar_status) # Leiaute self.line = QFrame() self.line.setFrameShape(QFrame.VLine) self.line.setFrameShadow(QFrame.Sunken) self.line.setLineWidth(0) self.line.setMidLineWidth(1) self.layout = QGridLayout() self.layout.addWidget(w1, 0, 0, 1, 1) self.layout.addWidget(self.line, 0, 1, 1, 1) self.layout.addWidget(w2, 0, 1, 1, 2) self.widget.setLayout(self.layout) self.setCentralWidget(self.widget) # Menu self.menu = QMenuBar() self.setMenuBar(self.menu) self.sobre = QAction("Sobre", self) self.sobre.setShortcut("F1") self.menu.addAction(self.sobre) self.sobre.triggered.connect(self.info) # Status self.status = QStatusBar() self.setStatusBar(self.status) self.status_label = QLabel("Pronto") self.status.addWidget(self.status_label) @Slot() def info(self): self.popup = QMessageBox(QMessageBox.Information, "Sobre", "Informações") self.popup.setInformativeText("""Clientes \nVersão 0.5 \nFeito com S2 por Zero \nMIT License""") self.popup.addButton(QMessageBox.Ok) self.popup.exec() @Slot() def atualizar_status(self, msg: str): self.status_label.setText(msg) @staticmethod def inicializar_db(): try: init_db() except NameError: popup = QMessageBox(QMessageBox.Critical, "Erro", "Erro") popup.setInformativeText( "Arquivo de configuração não foi encontrado") popup.addButton(QMessageBox.Ok) popup.exec() exit(1)
class NovoCliente(QWidget): status_signal = Signal(str) def __init__(self): self.db = ClientesDB() QWidget.__init__(self) font = QFont() font.setBold(True) # Labels em Negrito # Labels: self.label_title = QLabel("Novo Cliente") self.label_title.setFont(font) self.label_nome = QLabel("Nome Completo:") self.label_nome.setFont(font) self.label_endereco = QLabel("Endereço:") self.label_endereco.setFont(font) self.label_numero = QLabel("Número:") self.label_numero.setFont(font) self.label_cpf = QLabel("CPF:") self.label_cpf.setFont(font) # Entries: self.entry_nome = QLineEdit() self.entry_endereco = QTextEdit() self.entry_numero = QLineEdit() self.entry_cpf = QLineEdit() # Botões; self.button_salvar = QPushButton("&Salvar") self.button_salvar.clicked.connect(self.salvar_cliente) self.button_salvar.setShortcut("Ctrl+S") self.button_cancelar = QPushButton("Cancelar") self.button_cancelar.clicked.connect(self.limpar) self.button_cancelar.setShortcut("ESC") # Linha self.line = QFrame() self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.line.setLineWidth(0) self.line.setMidLineWidth(1) # Leiaute: self.layout = QVBoxLayout() self.layout_buttons = QHBoxLayout() self.layout.addWidget(self.label_title) self.layout.addWidget(self.line) self.layout.addWidget(self.label_nome) self.layout.addWidget(self.entry_nome) self.layout.addWidget(self.label_numero) self.layout.addWidget(self.entry_numero) self.layout.addWidget(self.label_cpf) self.layout.addWidget(self.entry_cpf) self.layout.addWidget(self.label_endereco) self.layout.addWidget(self.entry_endereco) self.layout_buttons.addWidget(self.button_salvar) self.layout_buttons.addWidget(self.button_cancelar) self.layout.addStretch(2) self.layout.addLayout(self.layout_buttons) self.setLayout(self.layout) @Slot() def salvar_cliente(self): nome = self.entry_nome.text() cpf = self.entry_cpf.text() numero = self.entry_numero.text() endereco = self.entry_endereco.toPlainText() data = { 'nome': nome, 'cpf': cpf, 'numero': numero, 'endereco': endereco } try: self.db.novo_cliente(data) self.status_signal.emit("Salvo") self.limpar() except ValueError as e: popup = QMessageBox(QMessageBox.Critical, "Erro", "Campo Inválido") popup.setInformativeText(str(e)) popup.addButton(QMessageBox.Ok) popup.exec() @Slot() def limpar(self): self.entry_nome.setText('') self.entry_endereco.setText('') self.entry_numero.setText('') self.entry_cpf.setText('')