Programimi nasil yeniden baslatirim?

Kulaga biraz acemice bir soru gibi geliyor ama amacim cmd programimi basa sarmak degil. Bu nedenle loop yapmak ise yaramiyor. Programimin iki temasi var ve bu temayi bir buton ile degistirmek mümkün (olacak). Bunun icin ise ayarlarin kayitli oldugu dosyadan tema ayarini degistiriyor. Ama bunu yaptigimda programimin kapanip tekrar acilmasini istiyorum cünkü temanin degismesi demek pencere ve tüm widget larin tekrar olusturulup yerlestirilmesi demek. Peki bunu nasil yaparim?

def change_theme():
    if theme == "black":
        config["GUI"]["theme"] = "white"
    elif theme == "white":
        config["GUI"]["theme"] = "black"

    with open(configfile, "r+") as log:
        config.write(log)
        log.close()
        sys.restart() #Umdugum gibi gitmedi :) Burayi doldurmak gerek...

Sanırım pencere içindeki tüm widgetleri güncelleyen bişey vardı update_idletasks() yada update() olabilir

Bir txt dosyasına veya veritabanına kullanıcının o an kullandığı temayı kaydedin. Kullanıcı kendi isteğiyle programı açarsa o temayla açsın. Eğer kullanıcı temayı değiştirecekse dosyadaki veriyi ona göre düzenleyip programı tekrar çalıştırın.
He eğer bu yöntemle kullanıcı o an yaptığı işi kaybediyor diyorsanız veritabanı kullanıp kullanıcının o an yaptığı işi veritabanına kaydedin. Açılırken o verilere göre açılsın.

1 Beğeni

Bahsettiginiz txt sistemini configparser la zaten yaptim. Ama kullaniciyi .ini dosyalari ile ugrastirmak istemiyorum diyelim :). Zaten yaptigim butona bastiktan sonra ini dosyasi düzenleniyor ve programi kapatip actiginizda tema degismis oluyor. Ama ayni sekilde kullaniciyi programi manuel olarak kapatip acmak zorunda birakmak istemiyorum

import os
os.system(program)
quit()

Şeklinde progrogramı yeniden başlatıp açık olanı kapatabilirsiniz.
.txt dosyaları yerine veritabanı kullanmak daha akıllıca olur. Hem kullanıcının dosyaları karıştırmasını engellemiş olursunuz hem de tek dosya olur.

1 Beğeni

Tekrar açıp kapatmayı düşünmüştüm de aklımdan çıkmış denerim. Veritabanı bilgim olsa herseye kullanırım zaten :joy:

apppath = defaultpath + "\\toolbar.pyw"
restart_command = "python.exe " + apppath
subprocess.call(restart_command, creationflags=CREATE_NO_WINDOW)
sys.exit()

Seklinde denedim. Program kapaniyor. Ama yenisi acilmiyor.
restart_command komutunu cmd de verdigimde su hata ile karsilasiyorum. Sebebini anlamiyorum:

Programim da sagdaki bu arada :smiley:

“defaultpath” değişkeninin aldığı değeri görebilir miyiz? Muhtemelen - hatadan anladığım kadarıyla - “e” dizinde “Python” adlı bir dosya aradığı için böyle oluyor.

Bu arada tüm araçları güncellemeyi denediniz mi? Araçlar güncellenince, kapatıp açmaya gerek kalmadan tema değişmeli.

defaultpath degiskeni actigimiz script in icinde oldugu dizini temsil ediyor. Yani apppath degiskeninin degeri e:\Python Projects\Toolbar py\toolbar.pyw oluyor. Dediginiz gibi e:\Python klasörünü ariyor ama e:\Python Projects olarak aramali. Canimi sikti simdi.

Arac güncelleme olayini biraz aciklar misiniz?

Ah, şimdi düzgün kafayla bakabildim resme…
Yazdığınız komut, “e:\Python” dosyasını sonradan gelen argümanlar ile çalıştırmaya çalışıyor…

“toolbar.pyw” dosyasının olduğu dizine “main.py” adından bir dosya açın ve aşağıdakileri ekleyin.

import os
import sys

while True:
    try:
        os.popen(sys.executable+os.sep+"toolbar.pyw").read() # read() ile kapanana kadar beklemesini sağlıyoruz.
    except KeyboardInterrupt:
        sys.exit()

“toolbar.pyw” dosyasına da tema ayarı değişince çıkış yapması için “sys.exit()” ekleyin. İşinizi görür sanırım.

Şurayı da incelerseniz güzel olur, http://effbot.org/tkinterbook/widget.htm

Ben de böyle bir şey yazmayı düşünüyorum ama bir kenarı değil de köşeyi kullanacak.

Tek yapman gereken GUI ve posisyoon degistirmek. Istersen scripti gönderebilirim sana.

Verdiginiz kod ne yapiyor tam olarak?