Boromir
Becerikli
- Katılım
- 27 Ağustos 2024
- Mesajlar
- 190
- Makaleler
- 1
- Çözümler
- 4
- Beğeniler
- 91
Arkadaslar, simdi ben bir proje yaptim. Cok basit bir proje. Login.py ve login oluyorsunuz login oldugunda bir DASHBOARD var. Iste dashboard'dayken log out olursaniz tekrar login page'ine geliyorsunuz. Pyinstaller kullandim sadece login page cikiyor.
Kod:
from pathlib import Path
from tkinter import Tk, Canvas, Entry, Button, PhotoImage
import time
import subprocess
import traceback
import sys
import logging
# Path ayarları
OUTPUT_PATH = Path(__file__).parent
ASSETS_PATH = OUTPUT_PATH / Path(r"C:\Users\Hageshiku-7900\OneDrive\Desktop\build\assets\LoginResimleri")
import os
import sys
# Dinamik dosya yolu fonksiyonu (resource_path)
def resource_path(relative_path):
"""Statik dosyaların dinamik yolu, onedir moduna PyInstaller uyumlu."""
try:
# PyInstaller ile paketlendiğinde geçici dizin 'MEIPASS' içinde çalışır
base_path = sys._MEIPASS
except AttributeError:
# Geliştirme ortamında mevcut dosya konumunu kullan
base_path = os.path.abspath(".")
# Sonucu terminale yazdırarak kontrol edelim
print(f"base_path: {base_path}")
return os.path.join(base_path, relative_path)
def relative_to_assets(path: str) -> Path:
return ASSETS_PATH / Path(path)
# Log ayarları
log_file_path = os.path.join(os.path.expanduser("~"), "error_log.txt")
logging.basicConfig(filename=log_file_path, level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s', filemode='a')
# Sahte bir API çağrısı simülasyonu
def mock_api_call(email, password):
print(f"API çağrısı yapılıyor: Email: {email}, Şifre: {password}")
time.sleep(2) # Simülasyon için 2 saniye bekliyoruz
if email == "a" and password == "1":
print("Giriş başarılı, API'den doğrulandı.")
return True
else:
print("Giriş başarısız, yanlış bilgiler.")
return False
# Pencereyi yavaşça saydamlaştırarak kapatmak
def smooth_transition_to_dashboard():
alpha = window.attributes("-alpha")
if alpha > 0:
alpha -= 0.05
window.attributes("-alpha", alpha)
window.after(50, smooth_transition_to_dashboard)
else:
successful_login()
# Başarılı giriş sonrası SONCALISANDIKKAT.py'yi başlatma fonksiyonu
import runpy
def successful_login():
try:
print("SONCALISANDIKKAT.py başlatılıyor...")
# Dinamik olarak tam dosya yolunu alıyoruz, çift '_internal' kullanmıyoruz.
script_path = resource_path("SONCALISANDIKKAT.py")
print(f"Tam dosya yolu: {script_path}")
logging.info(f"Tam dosya yolu: {script_path}")
# Dosya mevcut mu kontrol et
if os.path.exists(script_path):
print(f"{script_path} bulundu, çalıştırılıyor...")
logging.info(f"{script_path} bulundu, çalıştırılıyor...")
# Login penceresini kapatalım
window.destroy()
process = subprocess.Popen([sys.executable, script_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate() # Çıktıları yakalayalım
print(f"SONCALISANDIKKAT.py stdout: {stdout.decode()}")
print(f"SONCALISANDIKKAT.py stderr: {stderr.decode()}")
else:
raise FileNotFoundError(f"{script_path} dosyası bulunamadı!")
except Exception as e:
error_message = f"SONCALISANDIKKAT.py başlatılırken bir hata oluştu:\n{traceback.format_exc()}"
log_error(error_message) # Hata mesajını hem loga hem terminale yazdır
# Hata loglama fonksiyonu
def log_error(message):
"""Hataları hem terminale hem de log dosyasına yazdırır."""
print(message)
logging.error(message)
# Giriş kontrolü ve dashboard'a geçiş
def login():
email = entry_1.get()
password = entry_2.get()
# Mock API çağrısı yapıyoruz
if mock_api_call(email, password):
smooth_transition_to_dashboard() # Giriş başarılı ise smooth geçiş
window = Tk()
window.geometry("1366x768")
window.configure(bg="#FFFFFF")
window.attributes("-alpha", 1.0) # Pencerenin tam opak olarak başlamasını sağlıyoruz
canvas = Canvas(
window,
bg="#FAD4B8",
height=768,
width=1366,
bd=0,
highlightthickness=0,
relief="ridge"
)
canvas.place(x=0, y=0)
image_image_1 = PhotoImage(file=relative_to_assets("image_1.png"))
canvas.create_image(181.0, 424.1875, image=image_image_1)
image_image_2 = PhotoImage(file=relative_to_assets("image_2.png"))
canvas.create_image(957.3916625976562, 383.5093688964844, image=image_image_2)
image_image_3 = PhotoImage(file=relative_to_assets("image_3.png"))
canvas.create_image(319.0, 386.0, image=image_image_3)
image_image_4 = PhotoImage(file=relative_to_assets("image_4.png"))
canvas.create_image(248.0, 176.1875, image=image_image_4)
canvas.create_text(152.0, 239.0, anchor="nw", text="Email", fill="#333333", font=("Gilroy Medium", 13 * -1))
entry_image_1 = PhotoImage(file=relative_to_assets("entry_1.png"))
entry_bg_1 = canvas.create_image(319.5, 283.0, image=entry_image_1)
entry_1 = Entry(bd=0, bg="#FFFFFF", fg="#000716", highlightthickness=0)
entry_1.place(x=156.0, y=263.0, width=327.0, height=38.0)
canvas.create_text(362.0, 399.0, anchor="nw", text="Forgot Password?", fill="#AE4700", font=("Gilroy Medium", 14 * -1))
button_image_1 = PhotoImage(file=relative_to_assets("button_1.png"))
button_1 = Button(
image=button_image_1,
borderwidth=0,
highlightthickness=0,
command=login, # Giriş işlemine yönlendiriyoruz
relief="flat"
)
button_1.place(x=152.0, y=447.99749755859375, width=335.0, height=32.0)
canvas.create_text(152.0, 319.0, anchor="nw", text="Password", fill="#333333", font=("Gilroy Medium", 13 * -1))
entry_image_2 = PhotoImage(file=relative_to_assets("entry_2.png"))
entry_bg_2 = canvas.create_image(319.5, 363.0, image=entry_image_2)
entry_2 = Entry(bd=0, bg="#FFFFFF", fg="#000716", highlightthickness=0, show='*') # Şifre girişini gizlemek için
entry_2.place(x=156.0, y=343.0, width=327.0, height=38.0)
image_image_5 = PhotoImage(file=relative_to_assets("image_5.png"))
canvas.create_image(308.0, 529.1875, image=image_image_5)
window.resizable(False, False)
window.mainloop()
Bunun kodla alakali kismi ancak Successful_login'de olur diye dusunuyorum ama bir pathing de soz konusu... Kod lokalde calisiyor ama bir turlu exe yapamadim bu yazdigim kodu.