Askopenfilename() windows explorer.exe yi etkiliyor ve bozuyor

Merhabalar herkese. İçinde resim açmak için gerekli ‘path’ değişkenlerini aldığım askopenfile() fonksiyonu bulunan bir projem var. Hatta askopenfilenames() da kullanarak çoklu seçim yaptırdığım yerler de var. Sorun şu ki 10 15 kez dosya seçtikten sonra dosya seçme ekranı açılmıyor. Program donuyor,hatta windows gezginine de bir şeyler oluyor. Dosya gezginine tıklayınca açılmıyor vs. explorer.exe yi sonlandırıp açınca ya da 5 10 dakika bekleyince de düzeliyor.

Benim anladığım kadarıyla askopenfilename komutu ile gelen pencere dosya seçtikten sonra tam anlamıyla kapanmıyor ve arkaplanda açık kalıyor bu yüzden aynı işlemler yığılma yapıyor gibi bir olay oluyor. Yabancı forumlarda karıştırdım çözümleri denedim ama olmadı. Sizden de bu durumu yaşayan ya da fikri olan varsa yardım bekliyorum arkadaşlar. Şimdiden teşekkürler.

   under=Tk()
    under.withdraw()
    newImgPaths=askopenfilenames(parent=under,initialdir = imgpath,title = "Select image for frame",filetypes = (("png files","*.png"),("all files","*.*")))
    under.destroy()

Merhaba,

  1. Kodlarınızı eksik bir şekilde paylaşmışsınız.
  2. Girintiye dikkat etmemişsiniz.
  3. imgpath değişkeni tanımsız.

Biz bu kodları bu haliyle çalıştırırsak, problemin nereden kaynaklandığını bulamayız.

from tkinter import Tk
from tkinter.filedialog import askopenfilenames

root = Tk()
root.withdraw()

files = askopenfilenames(
    title="Select image for frame",
    filetypes = (("png files", "*.png"), ("all files", "*.*"))
)
print(files)

Yukarıdaki kodu çalıştırıp, içinde 15’den fazla png dosyasının bulunduğu dizindeki bütün png dosyalarının listesini ekrana yazdırabiliyorum. Ama sizin sorununuz bu değil ki. Resimlerle ne yapmak istiyorsunuz onu anlatın ve kodlarınızın ilgili kısımlarını karışıklığa yol açmayacak şekilde paylaşın lütfen.

Sorun kodun yazdığım kısmında olduğu için sadece orayı paylaştım listeyi bende alabiliyorum yazdırıyorum sorun yok. Sadece bir süre sonra yük biniyor ve explorer ece sapıtıyor root.destroy() Yani ana pencereyi destroy edersem komple program kapanacak bu yüzden under isimli pencere tanımlayıp onu destroy ettim ama yine çözülmedi.

Pardon, nereden biliyorsun?

Sadece kodun yazdigin kismindan olusan bir kodu calistirdiginda sorun cikiyor mu? Biz denedik ve olmadi cunku.

Hatta senin yazdigin kisim calismiyor bile, @dildeolupbiten’in duzelttigi koddan bahsediyoruz.

1 Beğeni

Tamam arkadaşlar müsait olduğumda kodun tamamını atacağım. Sadece o kısımda sorun olduğunu düşünüyorum çünkü bu askopenfile fonksiyonları devreye girince bozulmaya başlıyor ve yabancı forumlardan da araştırdım bu yüzden sorun yaşayanlar var ama cevapları bende işe yaramadı

Yani seçtiğiniz resimleri ekrana yazdırdıktan sonra mı sorun başlıyor? Yoksa seçtiğiniz resimlerle başka işlemler yapmaya çalışıyorsunuz, o zaman mı yük biniyor?

imgpath değişkenini hangi amaçla kullanıyorsunuz?

Labellara resimleri bastırıyorum animasyon programı gibi bir şey. Resim göstermede vs. Bir sorun yok ama resim eklemek için askopenfile kullanan buttona tıklayınca donuyor bir yerden sonra. Mesela programı 6 7 kez çalıştırdıktan sonra bozuluyor. Ama öncesinde her şey gayet düzgün. Herhangi bir donma olmuyor 6 7 kere programı test edince askopenfile çağrılınca donuyor.

imgpath dosya dizini için kullandigim bir değişken yer kaplamasin diye imgpath a yazıp imgpathi kullandım.

Çok uzun değilse tüm kodlarınızı paylaşabilir misiniz?

kod çok uzun olduğu için belirli kısımları paylaşacağım

class App():
   def __init__(self,master):  
         self.addFrameButton=Button(self.master,text=" Add new \n frame(s) 
                                 ",image=addImg,compound=LEFT,command=self.addFrame)
         self.addFrameButton.place(x=910,y=325)
   def addFrame(self):
    under=Tk()
    under.withdraw()
    newImgPaths=askopenfilenames(parent=under,initialdir = imgpath,title = "Select image for frame",filetypes = (("png files","*.png"),("jpg files","*.jpg"),("all files","*.*")))
    under.destroy()

root=Tk()
imgpath="C:/Users/Hüseyin/Desktop/animation gifs/frames"
app=App(root)
root.mainloop()
def addFrame(self):
    under=Tk()
    under.withdraw()
    newImgPaths=askopenfilenames(parent=under,initialdir = imgpath,title = "Select image for frame",filetypes = (("png files","*.png"),("jpg files","*.jpg"),("all files","*.*")))
    under.destroy()

Burada askopenfilenames için yeni bir parent oluşturmadaki amacınız ne? root'u niçin parent olarak vermiyorsunuz?

dediğim gibi explorer.exe yi etkilediği için root'u parent olarak kullanmasam da acaba under isimli bir parent tanımlasam ve under.destroy() ile onu ortadan kaldırsam bu yük birikmesini engeller miyim acaba diye düşündüm ancak işe yaramadı. Yani root ile de kullansam under ile de kullansam bir süre sonra dediğim sorun olabiliyor bazen de sorunsuz çalışıyor neye göre oluyor bilmiyorum yani. Acaba pycharm ide’sinden vs. mi kaynaklı? programı bitirip exe aldığımda sorun ortadan kalkabilir mi acaba?

Deneyebilirsiniz, pycharm bazen garip sorunlar çıkaran bir IDE. Ama yine de sorunu da sebebini de bilmiyoruz .explorer.exeden kastınız askopenfilenames fonksiyonunun açtığı pencere mi? Bir de kodunuzun tamamını görsek iyi olur.

explorer.exe den kastım windowsun işlemler kısmındaki explorer.exe yani bu anormalleşince windows gezgini falan da açılmıyor. Neyse sorun çoğalırsa kodun tamamını atacağım çok uzun olduğu için kirletmek istemedim burayı. Hepinizin ilgisine teşekkür ederim arkadaşlar sabah istemeden çıkıştım gibi anlaşıldım hatamız varsa affola :slight_smile:

Birden fazla dosyanız varsa proje klasörünüzü github gibi bir yere de yükleyebilirsiniz.

Biraz daha geliştirince yükleyeceğim. Şu an basit bir program ve videosunu çektim merak edenler şurdan izleyebilir: https://youtu.be/-_mYx6SHqT8

Link atarsan onlara da bakabiliriz.