2016-12-20 12 views
0

私がここで尋ねていることをしようとしている他のいくつかのposts(およびanother)を見ましたが、働いていない。私もこのdocumentationを参照していて、Pythonコンソールでヘルプ(QFileDialog.getSaveFileName)をチェックしました。それが環境と関係しているかどうか、または私のコードが見落とされているかどうかはわかりません。私はWindows 7 64ビットでPython 4.11.4でPython 2.7を使用しています。Python 2.7、PyQt 4.11、Windows 7 64ビットを使用してQFileDialogのデフォルトフィルタを設定できません

直接オブジェクト構築と静的メソッド(このthreadで提案されています)を試しましたが、次のコードではファイルダイアログのデフォルトフィルタまたは初期フィルタを設定できません。おそらく最初のファイルタイプ(pdf)が選択された状態でファイルダイアログが開きます。これはおそらくリストの最初のファイルタイプだからです。

if self.dlg.formatBox.currentIndex() == 1 : # if extension is pdf 
    dir = settings.value('/UI/lastSaveAsPdfFile') 
else: 
    dir = settings.value('/UI/lastSaveAsImageDir') 

defaultFilter = self.tr(self.dlg.formatBox.currentText()) 
#defaultFilter = "TIF format (*.tif *.TIF)" 

#(folderDialog, selectedFilter) = QFileDialog.getSaveFileNameAndFilter(
    #None, 
    #'Impression', 
    #dir, 
    #"PDF format (*.pdf *.PDF);;JPG format (*.jpg *.JPG);;JPEG format (*.jpeg *.JPEG)');;TIF format (*.tif *.TIF);;TIFF format (*.tiff *.TIFF);;PNG format (*.png *.PNG);;BMP format (*.bmp *.BMP);;ICO format (*.ico *.ICO);;PPM format (*.ppm *.PPM);;XBM format (*.xbm *.XBM);;XPM format (*.xpm *.XPM)", 
    #defaultFilter 
    #) 

#folderDialog = QFileDialog.getSaveFileName(
    #None, 
    #'Impression', 
    #dir, 
    #"PDF format (*.pdf *.PDF);;JPG format (*.jpg *.JPG);;JPEG format (*.jpeg *.JPEG)');;TIF format (*.tif *.TIF);;TIFF format (*.tiff *.TIFF);;PNG format (*.png *.PNG);;BMP format (*.bmp *.BMP);;ICO format (*.ico *.ICO);;PPM format (*.ppm *.PPM);;XBM format (*.xbm *.XBM);;XPM format (*.xpm *.XPM)", 
    #defaultFilter 
    #) 

folderDialog = QFileDialog(None, 'Impression', dir, "PDF format (*.pdf *.PDF);;JPG format (*.jpg *.JPG);;JPEG format (*.jpeg *.JPEG)');;TIF format (*.tif *.TIF);;TIFF format (*.tiff *.TIFF);;PNG format (*.png *.PNG);;BMP format (*.bmp *.BMP);;ICO format (*.ico *.ICO);;PPM format (*.ppm *.PPM);;XBM format (*.xbm *.XBM);;XPM format (*.xpm *.XPM)") 
folderDialog.selectNameFilter(defaultFilter) 
folderDialog.exec_() 

print 'Default Filter: {}'.format(defaultFilter) 

self.dlg.formatBoxは、ユーザーが希望する形式を選択できる親ウィンドウ内のコンボボックスです。私はこの情報を取得し、ファイルダイアログを開くときにこの形式にデフォルトフィルタを設定したいと思います。 (self.dlg.formatBoxに)選択された第六フィルタオプション(PNG)と、それが提示された方法でコードを実行すると、私に次のダイアログを与える - まだPDF:

enter image description here

次のプリントですコンソールに:

デフォルト・フィルタ:フォーマットはPNG(* .PNG * .PNG)

UPDATE defaultFilter変数は、対価の質問のコメントに取るように変更されました。

+0

'defaultFilter'はあなたのどのフィルタのリストにもありませんので、あらかじめ選択することはできません。最初のリンクされた答えで述べたように、 'QFileDialog'コンストラクタの例**は正しく動作します**。しかし、静的メソッドは、PyQt4またはPySideのいずれでも正しく動作していないようです。 PyQt5では、すべてのメソッドが正常に機能します。 – ekhumoro

+0

@ekhumoroそれでは、直接工法に焦点を当ててみましょう。どこが間違っているのか分かりますか?私はちょっと質問を編集しました – user25976

+0

@ekhumoroまた、defaultFilterの値は、私の問題が書式設定されているかどうかを確認するためのテストではあまり考えられていませんでした。 (コメントアウトされた)他のdefaultFilter値はどちらも動作しません – user25976

答えて

0

私の現在の環境(Python 2.7のPyQt 4.11)では静的メソッドのオプションは何もないようです。明らかにそれらは壊れています。

直接的なオブジェクトの構築は道のりです。デフォルトのフィルターがファイルダイアログセットフィルターと一致しないため、これは当初は機能しませんでした。これらは正確に一致する必要があります。そうしないと、ファイルダイアログでデフォルトフィルターを設定できません。

関連する問題