PySideメモ

ファイル、フォント、色の選択ダイアログ

2017/10/28
PySide 1.2.4Python 2.7.11

PySideであらかじめ用意されているファイル、フォント、色の選択ダイアログの呼び出し例です。

SpecialDialogs.pyの作成と実行

「SpecialDialogs.py」というファイルを作成して以下の様なPythonのコードを書きます。下記のリンクからダウンロードすることもできます。

SpecialDialogs.py
# -*- coding: utf-8 -*-
 
import os
 
# PySideのクラスを使えるようにする
from PySide.QtCore import *
from PySide.QtGui import *

# 自作ダイアログクラス
class MyFirstDialog(QDialog):
        # ウィンドウの初期化処理
        def __init__(self, parent=None):
                # ベース・クラスの初期化
                super(MyFirstDialog, self).__init__(parent)
               
                # ウィンドウタイトルを設定
                self.setWindowTitle("Special Dialogs")

                layout = QVBoxLayout()

                # ファイル保存ダイアログを表示するためのボタンを設定
                fileSavingButton = QPushButton("Save file.")
                fileSavingButton.clicked.connect(self.saveFile)
                layout.addWidget(fileSavingButton)
               
                # ファイルオープンダイアログを表示するためのボタンを設定
                fileOpenButton = QPushButton("Open file.")
                fileOpenButton.clicked.connect(self.openFile)
                layout.addWidget(fileOpenButton)
               
                # ファイルオープンダイアログ(複数選択可能)を表示するためのボタンを設定
                filesOpenButton = QPushButton("Open files.")
                filesOpenButton.clicked.connect(self.openFiles)
                layout.addWidget(filesOpenButton)
               
                # ディレクトリ選択ダイアログを表示するためのボタンを設定
                dirSelectionButton = QPushButton("Select directory.")
                dirSelectionButton.clicked.connect(self.selectDirectory)
                layout.addWidget(dirSelectionButton)
               
                # フォント選択ダイアログを表示するためのボタンを設定
                fontSelectionButton = QPushButton("Select font.")
                fontSelectionButton.clicked.connect(self.selectFont)
                layout.addWidget(fontSelectionButton)
               
                # 色選択ダイアログを表示するためのボタンを設定
                colorSelectionButton = QPushButton("Select color.")
                colorSelectionButton.clicked.connect(self.selectColor)
                layout.addWidget(colorSelectionButton)
               
                self.setLayout(layout)

        # ファイル保存ダイアログの表示
        def saveFile(self):
                (fileName, selectedFilter) = QFileDialog.getSaveFileName(self, 'Save file', os.path.expanduser('~') + '/Desktop')
                if fileName != "":
                        QMessageBox.information(self, "File", fileName)

        # ファイルオープンダイアログの表示
        def openFile(self):
                (fileName, selectedFilter) = QFileDialog.getOpenFileName(self, 'Open file', os.path.expanduser('~') + '/Desktop')
                if fileName != "":
                        QMessageBox.information(self, "File", fileName)

        # ファイルオープンダイアログ(複数選択可能)の表示
        def openFiles(self):
                (fileNames, selectedFilter) = QFileDialog.getOpenFileNames(self, 'Open files', os.path.expanduser('~') + '/Desktop')
                if 0<len(fileNames):
                        message = ""
                        for name in fileNames:
                                message += name
                                message += ", "
                               
                        QMessageBox.information(self, "Files", message)

        # ディレクトリ選択ダイアログの表示
        def selectDirectory(self):
                dirName = QFileDialog.getExistingDirectory(self, 'Select Directory', os.path.expanduser('~') + '/Desktop')
                if dirName != "":
                        QMessageBox.information(self, "Directory", dirName)

        # フォント選択ダイアログの表示
        def selectFont(self):
                (font, ok) = QFontDialog.getFont(QFont("MS UI Gothic"), self, "Select font")
                if ok:
                        name = font.rawName()
                        QMessageBox.information(self, "Font", name)

        # 色選択ダイアログの表示
        def selectColor(self):
                color = QColorDialog.getColor(Qt.green, self)
                if color.isValid():
                        name = color.name()
                        QMessageBox.information(self, "RGB color", name)       

if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
       
        # 自作ダイアログをインスタンス化して表示
        ui = MyFirstDialog()
        ui.show()
       
        app.exec_()

このファイルをダブルクリックするか、以下の様にコマンドプロンプトで実行すると作成したウィンドウが表示されます。

>python SpecialDialogs.py
SpecialDialogs表示されるウィンドウ

各ボタンを押すとそれに応じたダイアログがが表示されます。ダイアログを閉じるには右上の「✕」ボタンを押します。

表示されるダイアログは以下の通りです。

ファイル保存ダイアログ

SpecialDialogs-SaveFileファイル保存ダイアログ
def saveFile(self):
        (fileName, selectedFilter) = QFileDialog.getSaveFileName(self, 'Save file', os.path.expanduser('~') + '/Desktop')
        if fileName != "":
                QMessageBox.information(self, "File", fileName)

QFileDialog.getSaveFileName()で保存ファイルを選択するためのダイアログが表示されます。

選択結果は(選択されたファイルのフルパスの文字列, 選択されているファイルの種類の文字列)として返されます。ダイアログがキャンセルされた場合はファイルパスが空文字列になります。

ファイルオープンダイアログ

SpecialDialogs-OpenFileファイルオープンダイアログ
def openFile(self):
        (fileName, selectedFilter) = QFileDialog.getOpenFileName(self, 'Open file', os.path.expanduser('~') + '/Desktop')
        if fileName != "":
                QMessageBox.information(self, "File", fileName)

QFileDialog.getOpenFileName()で開くファイルを選択するためのダイアログが表示されます。

選択結果は(選択されたファイルのフルパスの文字列, 選択されているファイルの種類の文字列)として返されます。ダイアログがキャンセルされた場合はファイルパスが空文字列になります。

ファイルオープンダイアログ(複数ファイル選択可能)

SpecialDialogs-OpenFilesファイルオープンダイアログ(複数ファイル選択可能)
def openFiles(self):
        (fileNames, selectedFilter) = QFileDialog.getOpenFileNames(self, 'Open files', os.path.expanduser('~') + '/Desktop')
        if 0<len(fileNames):
                message = ""
                for name in fileNames:
                        message += name
                        message += ", "
                       
                QMessageBox.information(self, "Files", message)

QFileDialog.getOpenFileNames()で開くファイルを選択するためのダイアログが表示されます。このダイアログではCtrlキーやShiftキーをそしてファイルを選択することで複数のファイルが選択可能です。

選択結果は(選択されたファイルのフルパスの文字列のリスト, 選択されているファイルの種類の文字列)として返されます。ダイアログがキャンセルされた場合はファイルパスのリストが空になります。

ディレクトリ選択ダイアログ

SpecialDialogs-SelectDirectoryディレクトリ選択ダイアログ
def selectDirectory(self):
        dirName = QFileDialog.getExistingDirectory(self, 'Select Directory', os.path.expanduser('~') + '/Desktop')
        if dirName != "":
                QMessageBox.information(self, "Directory", dirName)

QFileDialog.getExistingDirectory()でディレクトリを選択するためのダイアログが表示されます。

選択結果はディレクトリのフルパスの文字列として返されます。ダイアログがキャンセルされた場合はディレクトリパスが空文字列になります。

フォント選択ダイアログ

SpecialDialogs-SelectFontフォント選択ダイアログ
def selectFont(self):
        (font, ok) = QFontDialog.getFont(QFont("MS UI Gothic"), self, "Select font")
        if ok:
                name = font.rawName()
                QMessageBox.information(self, "Font", name)

QFontDialog.getFont()でフォントを選択するためのダイアログが表示されます。ここではダイアログが開かれた段階では「MS UI Gothic」が選択されているように設定しています。

選択結果は(QFontオブジェクト, ブール値)として返されます。ダイアログがキャンセルされた場合は戻り値のブール値がFalseになります。

色選択ダイアログ(カラーピッカー)

SpecialDialogs-SelectColor色選択ダイアログ
def selectColor(self):
        color = QColorDialog.getColor(Qt.green, self)
        if color.isValid():
                name = color.name()
                QMessageBox.information(self, "RGB color", name)       

QColorDialog.getFont()で色を選択するためのダイアログが表示されます。ここではダイアログが開かれた段階では緑色(Qt.green)が選択されているように設定しています。

選択結果はQColorオブジェクトとして返されます。ダイアログがキャンセルされた場合は戻り値が無効なQColorオブジェクトとなり、QColorオブジェクトのisValid() がFalseを返します。