Kullanılan bileşenler:
- python3.11
- pyinstaller
- crontab
GUI.py içeriği:
#!/usr/bin/env python
# coding: utf-8
# In[1]:
import tkinter as tk
from tkinter import Label, PhotoImage
#from PIL import Image, ImageTk
# Ana pencereyi oluşturun
root = tk.Tk()
root.title(“İlk GUI Uygulamam”)
root.geometry(“600×350”)
# Tarih ve saat bilgisini iki değişkene ayırın
tarih = “12.12.2023”
saat = “15:30″
# Sütunları yapılandırın
root.columnconfigure(0, weight=1) # İlk sütun genişlemeye uygun
root.columnconfigure(1, weight=1) # İkinci sütun genişlemeye uygun
root.columnconfigure(2, weight=1) # Üçüncü sütun genişlemeye uygun
# Sol üst köşede tarih bilgisini gösteren bir etiket oluşturun
tarih_etiket = Label(root, text=tarih)
tarih_etiket.grid(row=0, column=0, padx=0, pady=0, sticky=”nw”)
# Üst ortada saat bilgisini gösteren bir etiket oluşturun
saat_etiket = Label(root, text=saat)
saat_etiket.grid(row=1, column=0, padx=0, pady=0, sticky=”nw”)
# Üst ortada kullanıcı adınızı gösteren bir etiket oluşturun
kullanici_adi_etiket = Label(root, text=”Kullanıcı Adı”)
kullanici_adi_etiket.grid(row=0, column=1, padx=0, pady=0, sticky=”nw”)
# Üst ortada kullanıcı adınızı gösteren bir etiket oluşturun
kullanici_adi_etiket = Label(root, text=”h4ck3r”)
kullanici_adi_etiket.grid(row=1, column=1, padx=0, pady=0, sticky=”nw”)
# Üst ortada kullanıcı adınızı gösteren bir etiket oluşturun
kullanici_adi_etiket = Label(root, text=”Anlık KWH”)
kullanici_adi_etiket.grid(row=2, column=1, padx=0, pady=30, sticky=”nw”)
# Üst ortada kullanıcı adınızı gösteren bir etiket oluşturun
kullanici_adi_etiket = Label(root, text=”1P veya 3P faz sayısı ve Amper”)
kullanici_adi_etiket.grid(row=2, column=1, padx=0, pady=50, sticky=”nw”)
# Üst ortada kullanıcı adınızı gösteren bir etiket oluşturun
kullanici_adi_etiket = Label(root, text=”Voltaj”)
kullanici_adi_etiket.grid(row=2, column=1, padx=0, pady=70, sticky=”nw”)
# Üst ortada kullanıcı adınızı gösteren bir etiket oluşturun
kullanici_adi_etiket = Label(root, text=”Sıcaklık”)
kullanici_adi_etiket.grid(row=2, column=1, padx=0, pady=90, sticky=”nw”)
# Üst ortada kullanıcı adınızı gösteren bir etiket oluşturun
kullanici_adi_etiket = Label(root, text=”Harcanan Enerji”)
kullanici_adi_etiket.grid(row=2, column=1, padx=0, pady=110, sticky=”nw”)
# Sayaç etiketini oluşturun
sayaç_etiket = Label(root, text=”Sayaç:”)
sayaç_etiket.grid(row=2, column=1, padx=0, pady=145, sticky=”nw”)
# Canvas (Tuval) ve Pil görselini oluşturun
canvas = tk.Canvas(root, width=200, height=300)
canvas.grid(row=2, column=0, padx=10, pady=0, sticky=”ne”)
canvas.create_rectangle(50, 50, 150, 250, fill=”white”, outline=”black”)
# Pil dilimlerini ve renklerini oluşturun
slices = []
colors = [
“#FF0000”, # Kırmızı
“#FF3300”, # Koyu Portakal
“#FF6600”, # Portakal
“#FF9900”, # Açık Portakal
“#FFCC00”, # Koyu Sarı
“#FFFF00”, # Sarı
“#CCFF00”, # Açık Yeşil
“#99FF00”, # Yeşil
“#66FF00”, # Koyu Yeşil
“#33FF00”, # Daha Koyu Yeşil
“#00FF00″ # Tam Yeşil
]
for i in range(11):
y1 = 250 – i * 20
y2 = y1 – 20
slice = canvas.create_rectangle(50, y2, 150, y1, fill=”white”, outline=”black”)
slices.append(slice)
# Sayaç etiketini oluşturun
saniye = 60 # Başlangıç değeri 60 saniye (1 dakika)
sayaç_etiket = Label(root, text=f”Sayaç: {saniye:02d}”, font=(“Arial”, 28))
sayaç_etiket.grid(row=2, column=1, padx=0, pady=130, sticky=”n”)
# Pilin doluluğunu ve sayacı güncelleyen fonksiyon
def güncelle():
global saniye
saniye -= 1
# Pil dilimlerini güncelle
dilim_sayısı = int((60 – saniye) / 6) # Her 6 saniyede bir dilim artacak
for i in range(11):
if i < dilim_sayısı:
canvas.itemconfig(slices[i], fill=colors[i])
else:
canvas.itemconfig(slices[i], fill=”white”)
# Sayaç etiketi güncelle
if saniye > 0:
sayaç_etiket.config(text=f”{saniye:02d}”)
else:
sayaç_etiket.config(text=”Süre doldu!”)
if saniye > 0:
root.after(1000, güncelle)
# Güncellemeyi başlat
güncelle()
# Pencereyi görüntülemek için bir döngü başlatın
root.mainloop()
Python dosyasını executable yapma:
pyinstaller –onefile GUI.py komutu ile python dosyası executable formatta tek dosya haline getiriliyor. onefile parametresi öncesinde tekrarlı 2 adet – olacak. Bu işlem sonrası dist dizini oluşuyor ve executable dosya oraya oluyor.
calistir.sh dosyasını crontab veya autostart işlemlerinde executable dosyayı tetiklemek için kullanma:
sudo pico calistir.sh dosyasının içeriği:
#!/bin/sh
cd /home/h4ck3r/Desktop/dist/
./GUI >> /home/h4ck3r/Desktop/cronlog.txt 2>&1
Raspbian reboot edilince crontab ile ilgili script’in tetiklenmesi (I. yol):
crontab -e
@reboot sleep 1 && export DISPLAY=:0 XAUTHORITY=/home/h4ck3r/.Xauthority && /home/h4ck3r/Desktop/calistir.sh
Raspbian reboot edilince autostart ile ilgili scrip’in tetiklenmesi (II. yol)
sudo mkdir ~/.config/autostart
sudo pico ~/.config/autostart/.desktop
[Desktop Entry]
Name=MyApp
Exec=/home/h4ck3r/Desktop/calistir.sh
Type=Application
#X-GNOME-Autostart-Delay=30 # Gecikmeyi saniye cinsinden
Böylece herhangi bir script veya GUI destekleyen bir form yazılımlarını RPI’de ilk açılışta çalıştırmış oluyoruz. Umarım faydalı bir içerik olur 🙂