Butona basıldığında başka bir programı argümanlarla çalıştırma

Tamamdır anladığım kadarıyla yazayım. Bu arada Tkinter değil PyQt ile yazmışsınız :d. Ben şuraya tuşa basıldığında başka bir Python script’ini çalıştıran ve o script’e bir-iki argüman gönderen bir örnek yazayım, siz de kendi kodunuza adapte edersiniz diye düşünüyorum (Tkinter ile yazayım, mevzu aynı.)

Başka bir Python dosyasını çalıştırmak adına, o komut satırından elle yaptığınızı taklit etmek için subprocess modülünden run fonksiyonunu kullanabiliriz. O script’e argüman paslamayı da sağlar. Script’in o argümanları elde etmesi için ise sys.argv listesi yeterli olacaktır diye zannediyorum.

Evvela GUI programı:

# burası arayuz.py

import subprocess
import tkinter as tk

# sizin `main.py` dosyasının yolu
CALISTIRILACAK_DOSYANIN_YOLU = r"..."

# ana ekran
pencere = tk.Tk()

# İki label koyuyoruz entry'lerin ne olduğunu anlamak için
tk.Label(pencere, text="Süre:").grid(row=0, column=0)
tk.Label(pencere, text="İsim:").grid(row=1, column=0)

# Entry'ler
sure_entry = tk.Entry(pencere)
sure_entry.grid(row=0, column=1)

isim_entry = tk.Entry(pencere)
isim_entry.grid(row=1, column=1)

# butona basıldığında çalışan fonksiyon
def calistir():
    # Entry'lerden veriyi al
	sure = sure_entry.get()
	isim = isim_entry.get()
	
    # komut satırına yazılacakların listesi ve çalıştırılması
	argumanlar = "python", CALISTIRILACAK_DOSYANIN_YOLU, sure, isim
	subprocess.run(argumanlar)
	
# işi başlatan buton
buton = tk.Button(pencere, text="Diğer dosyayı çalıştır", command=calistir)
buton.grid(row=2, columnspan=2)

pencere.mainloop()

Önemli nokta butona bağladığımız calistir fonksiyonu. Kullanıcının girdiği değerleri alıp bunlarla beraber diğer Python dosyasını çalıştırıyor. Örneğin süreye 12, isime de merhaba girildiyse, verilen komut python main.py 12 merhaba oluyor. Şimdi main.py'a bakıyoruz:

# burası main.py

import sys

# ilk argüman dosyanın ismidir, es geçiyoruz
_, sure, isim = sys.argv

# verilerle artık ne yaparsanız
sure = int(sure) * 60
isim = isim.title()

print(f"İsim: {isim}, Süre: {sure}s")

Burada python main.py 12 merhaba'daki "main.py", "12", "merhaba" değerlerini sys.argv'den alıyoruz.

Mesela konsoldan arayuz.py’yi çalıştırıyorum

image

Butona bastıktan sonra

İsim: Merhaba, Süre: 720s

ekranda beliriyor.

1 Beğeni