いわて駐在研究日誌

OpenCAE、電子工作、R/C等、徒然なるままに

PyQtでGUIアプリ (1)

環境設定が終わったので、少しづつアプリを作成していく。
本日の目標は、

  1. GUIウインドウからテキストファイルを指定して読み込み
  2. 別画面に表示、編集可能
  3. セーブ機能+Quitボタンを押すと閉じる

の3つ

以下のようになりました。あんまりスマートでないかも。

#  readfileandshow.py (coding UTF8)
#  refs.:  http://zetcode.com/tutorials/pyqt4/dialogs/
#       http://zetcode.com/tutorials/pyqt4/firstprograms/
#
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui

# ファイルダイアログclass
class FileDialog(QtGui.QMainWindow):
  
    def __init__(self):
        super(FileDialog, self).__init__()        
        self.initUI()
        
    def initUI(self):

        self.textEdit = QtGui.QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.statusBar()
        self.setFocus()
        self.setWindowTitle('File read, save and quit') 

        # openFileのAction
        openFile = QtGui.QAction(QtGui.QIcon('open.png'), 'Open', self)
        openFile.setShortcut('Ctrl+O')
        openFile.setStatusTip('Open new File')
        self.connect(openFile, QtCore.SIGNAL('triggered()'), self.showOpenDialog)
        
        # saveFileのAction
        saveFile = QtGui.QAction(QtGui.QIcon('save.png'), 'Save', self)
        saveFile.setShortcut('Ctrl+S')
        saveFile.setStatusTip('Save File')
        self.connect(saveFile, QtCore.SIGNAL('triggered()'), self.showSaveDialog)

        # QuitのAction
        Quit = QtGui.QAction(QtGui.QIcon('quit.png'), 'Quit', self)
        Quit.setShortcut('Ctrl+Q')
        Quit.setStatusTip('Quit this program')
        self.connect(Quit, QtCore.SIGNAL('triggered()'), self.QuitDialog)

        # Menu barのセットアップ
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(openFile)
        fileMenu.addAction(saveFile)
        fileMenu.addAction(Quit)
                                     
    def showOpenDialog(self):

        filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '')
        from os.path import isfile
        if isfile(filename):     
            import codecs
            fname = codecs.open(filename,'r','utf-8') #UTF-8のファイルを読み込み     
            data = fname.read()
            self.textEdit.setText(data)
            
    def showSaveDialog(self):
        
        savename = QtGui.QFileDialog.getSaveFileName(self, 'Save file', '')
        fname = open(savename, 'w')
        fname.write(self.textEdit.toPlainText())

    def QuitDialog(self):
        
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes |
                  QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            quit()
        else:
            return 


app = QtGui.QApplication(sys.argv)	#Qtアプリケーションオブジェクトを作る
                			#このオブジェクトハンドルはマウスや
                        		#キーボードのイベントを取得する大本になる
win = FileDialog()              # file dialog class 
win.show()                      # windowを示す
sys.exit( app.exec_() )         # exitボタンが押されるまで表示

# 次回は、Tab表示に挑戦!