«

»

Şub 07

Auto run any script (Python’da tasarlanan bir GUI) on startup for Raspberry Pi 4

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 🙂

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

AlphaOmega Captcha Classica  –  Enter Security Code
     
 

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>