PyQt 3 (メインウインドウ)

メインウインドウ

メインウインドウは、メニュー、ツールバー、ドック、ステイタスバーが組み合わされたウインドウです。
ドックは、中央部分と上下左右の5つの部分に分かれています。 それぞれの部分に独立したウィジェットを配置できます。

メインウインドウの例

テキストファイルを読み込んで、内容とファイルサイズを表示するスクリプトをメインウインドウを使用して作成してみましょう。

  1. 以下のスクリプトを、pyqt7.py というファイル名で保存します。
    #!env python
    import sys
    from PyQt4 import QtCore, QtGui
    
    
    class MainWindow(QtGui.QMainWindow):
    
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            self.setWindowTitle("Main Window")
    
            self.file_menu = self.menuBar().addMenu('&File')
            self.file_menu.addAction('New...', self.newFile)
            self.file_menu.addAction('Open...', self.openFile)
            self.file_menu.addAction('Quit...', QtGui.qApp.quit)
    
            self.t = QtGui.QToolBar(self)
            icon = QtGui.QIcon('tmp1.png')
            self.t.addAction(icon, 'New File', self.newFile)
            icon = QtGui.QIcon('tmp2.png')
            self.t.addAction(icon, 'Open File', self.openFile)
            icon = QtGui.QIcon('tmp3.png')
            self.t.addAction(icon, 'Quit', QtGui.qApp.quit)
            self.addToolBar(self.t)
    
            self.te = QtGui.QTextEdit()
            self.setCentralWidget(self.te)
    
            self.le1 = QtGui.QLineEdit()
            self.top_dock = QtGui.QDockWidget("File Name", self)
            self.top_dock.setWidget(self.le1)
            self.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.top_dock)
    
            label = QtGui.QLabel()
            label.setText('Size')
            self.sl = QtGui.QLabel()
            hbox = QtGui.QHBoxLayout()
            hbox.addWidget(label)
            hbox.addWidget(self.sl)
            widget = QtGui.QWidget()
            widget.setLayout(hbox)
            self.left_dock = QtGui.QDockWidget("File Info", self)
            self.left_dock.setWidget(widget)
            self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.left_dock)
    
            self.status_bar = QtGui.QStatusBar(self)
            self.status_bar.showMessage('Here is Status Bar', 5000)
            self.setStatusBar(self.status_bar)
    
    
        def newFile(self):
            self.te.setText('')
            self.le.setText('')
            self.status_bar.showMessage('New File', 5000)
    
    
        def openFile(self):
            fn = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/User/abe')
            fp = open(fn)
            data = fp.read()
            self.te.setText(data)
            fp.close()
            self.le1.setText(fn)
            l = len(data)
            self.sl.setText(str(l))
            self.status_bar.showMessage('Open File ' + fn, 5000)
    
    
    app = QtGui.QApplication(sys.argv)
    m = MainWindow()
    m.show()
    sys.exit(app.exec_())
    

    アイコン用画像
    [アイコン画像 tmp1.png] [アイコン画像 tmp2.png] [アイコン画像 tmp3.png]
  2. 以下のように実行します。
    # python pyqt7.py
    実行後 (Mac)
    [メインウインドウサンプル]
    Oepn Fileメニューまたは、Open Fileアイコンをクリックして表示されるファイルダイアログ
    [ファイルダイアログ]
    ファイルを読み込んだ後
    [メインウインドウサンプル]
    実行後 (Linux)
    [メインウインドウサンプル]
    Oepn Fileメニューまたは、Open Fileアイコンをクリックして表示されるファイルダイアログ
    [ファイルダイアログ]
    ファイルを読み込んだ後
    [メインウインドウサンプル]

スクリプト解説

class MainWindow(QtGui.QMainWindow):
QMainWindowを継承してメインウインドウのクラスを作成します。
def __init__(self, parent=None):
MainWindowクラスの初期化メソッドです。
super(MainWindow, self).__init__(parent)
親クラス QMainWindow の初期化メソッドを実行します。
self.file_menu = self.menuBar().addMenu('&File')
Fileメニューを作成します。
QMainWindowクラスのメソッドmenuBar()によってメニューバーのインスタンスを得て、 そのインスタンスのメソッドaddMenu()によってFileという名前のメニューを追加します。
追加されたFileメニューのインスタンスはインスタンス変数file_menuに代入しておきます。
self.file_menu.addAction('New...', self.newFile)
FileメニューにNewメニューを追加し、このメニューを選ぶとnewFile()メソッドを実行するように設定します。
self.file_menu.addAction('Open...', self.openFile)
FileメニューにOpenメニューを追加し、このメニューを選ぶとopenFile()メソッドを実行するように設定します。
self.file_menu.addAction('Quit...', QtGui.qApp.quit) # Can not display
FileメニューにQuitメニューを追加し、このメニューを選ぶとQtGui.qApp.quit()メソッドを実行するように設定します。
self.t = QtGui.QToolBar(self)
ツールバーのインスタンスを作成します。
icon = QtGui.QIcon('tmp1.png')
画像tmp1.pngを表示するアイコンのインスタンスを作成します。
self.t.addAction(icon, 'New File', self.newFile)
ツールバーにtmp1.pngを表示したアイコンを追加し、このアイコンがクリックされるとnewFile()メソッドが実行されるように設定します。
icon = QtGui.QIcon('tmp2.png')
画像tmp2.pngを表示するアイコンのインスタンスを作成します。
self.t.addAction(icon, 'Open File', self.openFile)
ツールバーにtmp2.pngを表示したアイコンを追加し、このアイコンがクリックされるとopenFile()メソッドが実行されるように設定します。
icon = QtGui.QIcon('tmp3.png')
画像tmp3.pngを表示するアイコンのインスタンスを作成します。
self.t.addAction(icon, 'Quit', QtGui.qApp.quit)
ツールバーにtmp3.pngを表示したアイコンを追加し、このアイコンがクリックされるとQtGui.qApp.quit()メソッドが実行されるように設定します。
self.addToolBar(self.t)
メインウインドウにツールバーを追加します。
self.te = QtGui.QTextEdit()
テキストを表示•編集するQTextEditのインスタンスを作成します。
self.setCentralWidget(self.te)
QTextEditをメインウインドウの中心に設定します。
self.le1 = QtGui.QLineEdit()
1行分のテキストを表示•編集するQLineEditのインスタンスを作成します。
self.top_dock = QtGui.QDockWidget("File Name", self)
メインウインドウに設定するためのQDockWidgetを作成します。
このインスタンスは、後でメインウインドウの上部に表示します。
self.top_dock.setWidget(self.le1)
QLineEditをQDockWidgetに設定します。
self.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.top_dock)
メインウインドウの上部にQDockWidgetを設定します。
このメソッドの第一引数には以下のどれかを指定します。
QtCore.Qt.LeftDockWidgetArea
メインウインドウのドック部分の左側
QtCore.Qt.RightDockWidgetArea
メインウインドウのドック部分の右側
QtCore.Qt.TopDockWidgetArea
メインウインドウのドック部分の上側
QtCore.Qt.BottomDockWidgetArea
メインウインドウのドック部分の下側
label = QtGui.QLabel()
label.setText('Size')
ラベルウィジェットのインスタンスを作成し、文字列Sizeを表示します。
self.sl = QtGui.QLabel()
読み込んだファイルのサイズ数を表示するためのラベルを作成します。
hbox = QtGui.QHBoxLayout()
ウィジェットを横方向に並べるレイアウトを作成します。
hbox.addWidget(label)
hbox.addWidget(self.sl)
レイアウトにラベルを追加していきます。
widget = QtGui.QWidget()
ラベルを並べたレイアウトを置くためにウィジェットを作成します。
widget.setLayout(hbox)
ウィジェットにレイアウトを設定します。
self.left_dock = QtGui.QDockWidget("File Info", self)
ウィジェットをメインウインドウに置くためのドックを作成します。
self.left_dock.setWidget(widget)
ドックにウィジェットを設定します。
self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.left_dock)
ドックをメインウインドウの右ドックに設定します。
self.status_bar = QtGui.QStatusBar(self)
ステイタスバーを作成します。
self.status_bar.showMessage('Here is Status Bar', 5000)
ステイタスバーにHere is Status Barというメッセージを5秒間(5000ms)表示します。
このメソッドの第二引数に0を与えると、clearMessage()メソッドを実行するまでメッセージが消えません。
self.setStatusBar(self.status_bar)
メインウインドウにメニューバーを設定します。
def newFile(self):
メニューまたはツールバーから呼ばれるメソッドです。
中央のQTextEditと上部のQLabelをクリアします。
def openFile(self):
メニューまたはツールバーから呼ばれるメソッドです。
ファイルダイアログによってファイルを読み込み、ドックの中央にファイルの内容を、右部にファイルサイズを表示します。
fn = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/User/abe')
ファイルダイアログを表示して、選択されたファイル名をfnに代入します。
第三引数の/User/abeは環境によって変更する必要があります。

参考


Prev
index | home
abetmhr@gmail.com