4.3 GUI

Python界有很多GUI包(绘图、Web框架,Python界好像喜欢如此),多数是某些原生或C++库的封装。著名者如Qt、wxWidgets、Tkinter、GTK等。本节仅举Qt的HelloWorld例子。

4.3.1 配置IPython

与绘图功能一样,在IPython控制台也可以无阻塞地访问GUI窗口。%gui方法激活消息循环集成系统,该方法可接受的选项是wx、qt、gtk和tk。这里我们使用%gui qtipython --gui qt

本节的例子需要安装PyQt4或PySide,两者的API几乎是一致的。

4.3.2 PyQt的Hello World程序

from PyQt4 import QtGui

class HelloWorld(QtGui.QWidget):
    """docstring for HelloWorld"""
    def __init__(self):
        super(HelloWorld, self).__init__()

        # create the button
        self.button = QtGui.QPushButton('Click me...', self)
        self.button.clicked.connect(self.clicked)

        # create the layout
        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.button)
        self.setLayout(vbox)

        # show the win
        self.show()

    def clicked(self):
        msg = QtGui.QMessageBox(self)
        msg.setText('Hello World!')
        msg.show()

通过集成QWidget可创建一个窗口类,QWidget是所有窗口和控件的基类。

现在在IPython命令行中输入:

window = HelloWorld()

即可显示一个新的窗口,然后可直接在代码中触发click操作:

window.clicked()

如此容易的交互方式,对于调试复杂窗口会很有帮助。