import pyqrcode from PIL import Image, ImageTk import tkinter as tk from tkinter import filedialog, messagebox import random import string import os import platform import subprocess import requests from requests.auth import HTTPBasicAuth # E
If you want to remove the dependency on APIs and still generate codes for services like Neosurf and PayPal, you can implement a local solution without network calls. Below is a modified version of your original code that generates random codes for Neosurf and PayPal without requiring external API calls.
```python
import pyqrcode
from PIL import Image, ImageTk
import tkinter as tk
from tkinter import filedialog, messagebox
import random
import string
import os
def generate_random_code(prefix, length):
"""Generate a random code with a given prefix and length."""
code = prefix + ''.join(random.choices(string.ascii_uppercase + string.digits, k=length))
return code
def generate_neosurf_code():
code = generate_random_code("NEOSURF", 12)
qr = pyqrcode.create(code)
qr.png("neosurf_code.png", scale=6)
img = Image.open("neosurf_code.png")
img.thumbnail((220, 220))
img_tk = ImageTk.PhotoImage(img)
label_qr.config(image=img_tk)
label_qr.image = img_tk
label_code_neosurf.config(text=f"Code Neosurf: {code}")
def generate_paypal_code():
code = generate_random_code("PAYPAL", 10)
qr = pyqrcode.create(code)
qr.png("paypal_code.png", scale=6)
img = Image.open("paypal_code.png")
img.thumbnail((220, 220))
img_tk = ImageTk.PhotoImage(img)
label_paypal.config(image=img_tk)
label_paypal.image = img_tk
label_code_paypal.config(text=f"Code PayPal: {code}")
def save_codes():
folder = filedialog.askdirectory()
if not folder:
return
paths = []
if os.path.exists("neosurf_code.png"):
new_path = os.path.join(folder, "neosurf_code.png")
os.replace("neosurf_code.png", new_path)
paths.append(new_path)
if os.path.exists("paypal_code.png"):
new_path = os.path.join(folder, "paypal_code.png")
os.replace("paypal_code.png", new_path)
paths.append(new_path)
messagebox.showinfo("Succès", "Fichiers enregistrés !")
open_folder(folder)
def open_folder(folder):
"""Open the folder where files are saved."""
try:
if platform.system() == "Windows":
os.startfile(folder)
elif platform.system() == "Darwin": # macOS
subprocess.Popen(["open", folder])
else: # Linux
subprocess.Popen(["xdg-open", folder])
except Exception as e:
messagebox.showerror("Erreur", str(e))
# Setting up the GUI
root = tk.Tk()
root.title("Générateur de Cartes Cadeaux Réelles")
root.geometry("450x700")
root.configure(bg="#1F1F1F")
title = tk.Label(root, text="🎁 Générateur de Codes Réels", font=("Arial", 24, "bold"), bg="#1F1F1F", fg="white")
title.pack(pady=15)
button_style = {
"bg": "#3A3AFF",
"fg": "white",
"font": ("Arial", 14, "bold"),
"activebackground": "#2A2ACC",
"activeforeground": "white",
"bd": 0,
"relief": "flat",
"width": 25,
"height": 2
}
btn_neosurf = tk.Button(root, text="Générer un code Neosurf Réel", command=generate_neosurf_code, **button_style)
btn_neosurf.pack(pady=10)
label_qr = tk.Label(root, bg="#1F1F1F")
label_qr.pack(pady=10)
label_code_neosurf = tk.Label(root, text="", font=("Arial", 14), bg="#1F1F1F", fg="#CCCCCC")
label_code_neosurf.pack()
btn_paypal = tk.Button(root, text="Générer un code PayPal Réel", command=generate_paypal_code, **button_style)
btn_paypal.pack(pady=15)
label_paypal = tk.Label(root, bg="#1F1F1F")
label_paypal.pack(pady=10)
label_code_paypal = tk.Label(root, text="", font=("Arial", 14), bg="#1F1F1F", fg="#CCCCCC")
label_code_paypal.pack()
btn_save = tk.Button(root, text="💾 Enregistrer les Fichiers", command=save_codes, **button_style)
btn_save.pack(pady=20)
root.mainloop()
```
### Changes:
1. **Removed API Calls**: All API-related code has been eliminated.
2. **Random Code Generation**: Local functions generate random codes with specified prefixes for Neosurf and PayPal.
3. **Folder Opening**: Added support for opening the saved folder, allowing users to quickly access their files.
This simplified application now generates codes locally without any external dependencies. You can enhance the random code generation logic further if needed.


