Mundo em Python

Simulador de ATM (Usando tkinter )

# Sem utilizar a entrada de código


import tkinter as tk
from tkinter import messagebox
saldo = 0.0
estado = "pronto" # Controle do estado do display: "pronto" ou "mensagem"

def clicar(botao):
global saldo, estado
if botao.isdigit() or botao == ".": # Se for um número ou ponto
if estado == "mensagem": # Se o display está mostrando uma mensagem
entrada.set("") # Limpa o display
estado = "pronto" # Volta para o estado pronto
entrada.set(entrada.get() + botao)
elif botao == "C":
entrada.set("")
estado = "pronto"
elif botao == "Verificar Saldo":
entrada.set(f"Saldo: € {saldo:.2f}")
estado = "mensagem"
elif botao == "Depositar dinheiro":
try:
valor = float(entrada.get())
if valor <= 0:
raise ValueError("Valor deve ser positivo.")
saldo += valor
entrada.set(f"Depósito de €{valor:.2f} realizado!")
estado = "mensagem"
except ValueError:
messagebox.showerror("Erro", "Digite um valor válido para depositar!")
entrada.set("")
estado = "pronto"
elif botao == "Tirar dinheiro":
try:
valor = float(entrada.get())
if valor <= 0:
raise ValueError("Valor deve ser positivo.")
if valor > saldo:
messagebox.showerror("Erro", "Saldo insuficiente!")
else:
saldo -= valor
entrada.set(f"Foi tirado €{valor:.2f} da sua conta!")
estado = "mensagem"
except ValueError:
messagebox.showerror("Erro", "Digite um valor válido para sacar!")
entrada.set("")
estado = "pronto"
elif botao == "Sair":
janela.destroy()
else:
entrada.set(entrada.get() + botao) janela = tk.Tk()
janela.title("Simulador de ATM")
janela.geometry("500x400")
janela.resizable(False, False) entrada = tk.StringVar() display = tk.Entry(janela, textvariable=entrada, font=("Arial", 20), justify="center", bd=10, relief="sunken")
display.grid(row=0, column=0, columnspan=4, sticky="nsew") botoes = [
"7", "8", "9", "Verificar Saldo",
"4", "5", "6", "Depositar dinheiro",
"1", "2", "3", "Tirar dinheiro",
"C", "0", ".", "Sair"
] for i, botao in enumerate(botoes):
cmd = lambda b=botao: clicar(b)
tk.Button(
janela, text=botao, command=cmd, font=("Arial", 15), width=5, height=2, wraplength=100, justify="center"
).grid(row=1 + i // 4, column=i % 4, sticky="nsew") for i in range(5):
janela.grid_rowconfigure(i, weight=1)
janela.grid_columnconfigure(i, weight=1)
janela.mainloop()

# Introduzir um código


import tkinter as tk
from tkinter import messagebox
saldo = 0.0
estado = "pronto"
codigo_correto = "1234"
def iniciar_simulador():
global saldo, estado def clicar(botao):
global saldo, estado
if botao.isdigit() or botao == ".":
if estado == "mensagem":
entrada.set("")
estado = "pronto"
entrada.set(entrada.get() + botao)
elif botao == "C":
entrada.set("")
estado = "pronto"
elif botao == "Verificar Saldo":
entrada.set(f"Saldo: € {saldo:.2f}")
estado = "mensagem"
elif botao == "Depositar dinheiro":
try:
valor = float(entrada.get())
if valor <= 0:
raise ValueError("Valor deve ser positivo.")
saldo += valor
entrada.set(f"Depósito de €{valor:.2f} realizado!")
estado = "mensagem"
except ValueError:
messagebox.showerror("Erro", "Digite um valor válido para depositar!")
entrada.set("")
estado = "pronto"
elif botao == "Tirar dinheiro":
try:
valor = float(entrada.get())
if valor <= 0:
raise ValueError("Valor deve ser positivo.")
if valor > saldo:
messagebox.showerror("Erro", "Saldo insuficiente!")
else:
saldo -= valor
entrada.set(f"Foi tirado €{valor:.2f} da sua conta!")
estado = "mensagem"
except ValueError:
messagebox.showerror("Erro", "Digite um valor válido para sacar!")
entrada.set("")
estado = "pronto"
elif botao == "Sair":
janela.destroy()
else:
entrada.set(entrada.get() + botao) # Janela principal
janela = tk.Tk()
janela.title("Simulador de ATM")
janela.geometry("500x400")
janela.resizable(False, False) entrada = tk.StringVar() display = tk.Entry(janela, textvariable=entrada, font=("Arial", 20), justify="center", bd=10, relief="sunken")
display.grid(row=0, column=0, columnspan=4, sticky="nsew") botoes = [
"7", "8", "9", "Verificar Saldo",
"4", "5", "6", "Depositar dinheiro",
"1", "2", "3", "Tirar dinheiro",
"C", "0", ".", "Sair"
] for i, botao in enumerate(botoes):
cmd = lambda b=botao: clicar(b)
tk.Button(
janela, text=botao, command=cmd, font=("Arial", 15), width=5, height=2, wraplength=100, justify="center"
).grid(row=1 + i // 4, column=i % 4, sticky="nsew") for i in range(5):
janela.grid_rowconfigure(i, weight=1)
janela.grid_columnconfigure(i, weight=1)
janela.mainloop() def verificar_codigo():
if entrada_codigo.get() == codigo_correto:
janela_codigo.destroy()
iniciar_simulador()
else:
messagebox.showerror("Erro", "Código incorreto! Tente novamente.")
janela_codigo = tk.Tk()
janela_codigo.title("Autenticação")
janela_codigo.geometry("300x150")
janela_codigo.resizable(False, False) tk.Label(janela_codigo, text="Digite o código de acesso:", font=("Arial", 14)).pack(pady=10)
entrada_codigo = tk.StringVar()
campo_codigo = tk.Entry(janela_codigo, textvariable=entrada_codigo, font=("Arial", 14), show="*")
campo_codigo.pack(pady=5)
campo_codigo.focus_set() # Define o foco no campo de entrada

tk.Button(janela_codigo, text="Entrar", command=verificar_codigo, font=("Arial", 14)).pack(pady=10) janela_codigo.mainloop()

 

0