2016-03-25 17 views
2

Bir python betiği için bir GUI oluşturmak için Tkinter kullanıyorum. Dosya ve dizinleri seçmemi sağlayan bir iletişim kutusu açan bir düğmeye ihtiyacım var. Bugüne kadar , benDosya ve dizinleri taramak ve seçmek için Tkinter'daki aynı iletişim kutusunu nasıl kullanabilirim?

tkFileDialog.askdirectory(parent=root, title=dirtext1) 
sadece iletişim kutusunda dizinleri seçmenizi sağlar

ve bana sadece dosyaları seçin sağlayan

tkFileDialog.askopenfilename(parent=root, title=filetext) 

rastlamak ettik. Şu andan itibaren, bu iletişim kutularına her biri bu işlevlerden birini arayan ayrı düğmeler kullanarak erişiyorum. Tek bir iletişim kutusu kullanarak bir dosya ya da klasör seçmek için zaten var mı?

+1

Düğmeye basıldığında, 'askdirectory()' ve 'askopenfilename()' işlevlerini sıralamak mı istiyorsunuz? – Goyo

+0

Hayır, dosya veya klasörleri seçmek için ortak bir iletişim kutusu olmasını istiyorum. (Bunu açıklığa kavuşturmak için soruyu düzenledik) –

+0

Bunların gerçekten titizlikle yapılmasını sağlayacak şekilde yapılandırılmamış olsa da, kullanıcıdan 'tkinter.askopenfilename() 'kullanarak bir dosya seçmesini ve ardından os.path.dirname komutunu kullanmasını isteyebilirsiniz.(), dosyanın seçildiği dizini almak için seçilen dosyada, aynı iletişim kutusundan, hem bir dosyayı hem de bir dizini etkili bir şekilde döndürür. –

cevap

5

Sanırım öyle değil. Hiçbir Orada yerleşik olan sınıfın kolayca yapmak için

İncelenmesi

Eğer tkFileDialog modülün kaynak koduna baktığımızda, her iki Open ve Directory sınıflar tkCommonDialog bulunan _Dialog devralır.

Şimdiye kadar iyi; Bu sınıflar basit ve sadece iki yöntem uzanır. _fixresult, seçeneklerinizi temel alan filtrelerdir (umut verici) ve _fixoptions, sağ tcl parametrelerini ekler (ilk dizin gibi).

Ancak Dialog sınıfına ulaştığımızda (_Dialog'un üstü), bir adın tcl komutunu çağırdığını görüyoruz. Yerleşik isimler "tk_getOpenFile" ve "tk_chooseDirectory" dır. Bundan sonra çok fazla python seviyesinde özgürlüğümüz yok. Başka ne olduğunu görmeye gidersek tcl scripts are avaliable, we are disappointed.

seçenekleriniz Görünüşe

  • ttk::getOpenFile
  • ttk::getSaveFile
  • ttk::chooseDirectory
  • ttk::getAppendFile

Sonuç

Sıçanlar! Neyse ki, liste kutularını, giriş alanlarını, düğmeyi (ve diğer tk-yerleşimlerini) ve os modülünü kullanarak kendi iletişiminizi yapabilmeniz oldukça kolay olmalı.

yorumlarınızı itibaren

, bu gibi alternatif görünüyor Basit uygulanabilir bir basit iş çevresinde kullanmak olabilir

directory = os.path.dirname(os.path.realpath(tkFileDialog.askopenfilename())) 

Onlar bir dosya seçmek zorunda, ama "Aç" olacak Düğüm, yolun dosya konumundan

hesaplanmış olması anlamında "bir yol döndürür", ama gerçekten istiyorum!

Bu nedenle, bu davranışı gerçekten istediğiniz ancak widget'ı yeniden denemek istemiyorsanız, doğrudan tcl komut dosyalarını çağırabilirsiniz. Kodu getOpenFile'dan kopyalamak ve daha genel bir nesneyi seçmek için izin veren daha gevşek argümanlar sağlamak mümkün olabilir. Bu benim uzmanlık alanım değil ve gerçekten kötü bir fikir gibi görünüyor, ancak here doğrudan tcl'i nasıl aradığınız ve here'un altında yatan komutlar hakkında daha fazla bilgi edinebileceğiniz yer.

İlgili konular