2

(我编辑了整个问题更清楚)


你好,

我从未与 Python GUI 库发生过任何事情。我知道有很多并且有据可查,但由于我只需要一个片段,我不喜欢深入研究文档来寻找一种方法来做到这一点。如果我要编写一个 GUI 程序,我肯定会这样做,但这对于我的临时脚本来说只需要几行。

对我(GUI noob)来说,在一段代码之后用 Python 编写最简单和最直接的方法是什么?更少的线条=更多的幸福。

  1. 按文件名抓取 JPEG 图片。
  2. 显示它的缩略图。
  3. 在缩略图下方显示一个文本字段,以便用户可以输入标题。
  4. 等到用户按下他/她键盘上的ENTER键。在这种情况下,关闭并返回输入。
  5. ...或等到用户点击DELETE键。在这种情况下,关闭并返回有关决定的信息(删除图片)。

依赖项或仅 Linux 的解决方案都可以。我需要在 Xubuntu 机器上运行它。请问有什么代码片段吗?我相信对于 Python GUI 领域的熟练人员来说,这只是 5 分钟的事情。我需要研究大量的图书馆文档。谢谢!

4

2 回答 2

1

下面是一个或多或少符合规范的最小 python 脚本。

它需要安装 python2 和 pyqt4 包,并且它不适用于 python3(尽管如果需要,它可以很容易地适应这样做)。

如果用户输入有效的标题并按下回车,脚本将返回状态码 0 并将标题打印到标准输出;否则,如果用户输入了无效的标题(仅限空白或空格),或者只是关闭对话框而不做任何事情,脚本将返回状态码 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)
于 2012-11-26T22:06:34.510 回答
0

Python 有几个很好的 GUI 库。python 内置的“标准”库是tkinterhttp ://wiki.python.org/moin/TkInter 。有人说这wxPython更加强大和直接:http ://www.wxpython.org/ 。

我认为您可以从 wxPython 开始,他们有很多教程和示例可供您深入研究(只需运行 DEMO)。

他们有一个名为“ImageBrowser”的示例,这可能是一个很好的起点。

关于不同应用程序之间的通信,可以使用“管道”和“重定向”进行通信。但是如果一切都是用python编写的,我认为这是错误的方法,您可以在python脚本中显示图像形式并在内部获取结果。

于 2012-11-25T10:40:33.303 回答