以下は、多かれ少なかれ仕様に適合する最小限の python スクリプトです。
python2 および pyqt4 パッケージをインストールする必要があり、python3 では動作しません (ただし、必要に応じて簡単に変更できます)。
ユーザーが有効なキャプションを入力して Enter キーを押すと、スクリプトはステータス コード 0 を返し、キャプションを stdout に出力します。それ以外の場合、ユーザーが無効なキャプション (空または空白のみ) を入力した場合、または何もせずに単にダイアログを閉じた場合、スクリプトはステータス コード 1 を返し、何も出力しません。
bash の使用例:
$ CAPTION=$(python imgviewer.py image.jpg)
$ [ $? -eq 0 ] && echo $CAPTION
imgviewer.py :
import sys, os
from PyQt4 import QtGui, QtCore
class Dialog(QtGui.QDialog):
def __init__(self, path):
QtGui.QDialog.__init__(self)
self.viewer = QtGui.QLabel(self)
self.viewer.setMinimumSize(QtCore.QSize(400, 400))
self.viewer.setScaledContents(True)
self.viewer.setPixmap(QtGui.QPixmap(path))
self.editor = QtGui.QLineEdit(self)
self.editor.returnPressed.connect(self.handleReturnPressed)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.viewer)
layout.addWidget(self.editor)
def handleReturnPressed(self):
if self.editor.text().simplified().isEmpty():
self.reject()
else:
self.accept()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
args = app.arguments()[1:]
if len(args) == 1:
dialog = Dialog(args[0])
if dialog.exec_() == QtGui.QDialog.Accepted:
print dialog.editor.text().simplified().toLocal8Bit().data()
sys.exit(0)
else:
print 'ERROR: wrong number of arguments'
sys.exit(1)