zoukankan      html  css  js  c++  java
  • Pyqt4学习笔记-简单案例

    官方文档:http://zetcode.com/gui/pyqt4/

    中文文档:http://www.qaulau.com/books/PyQt4_Tutorial/index.html

    QtCore:核心的非GUI功能,对时间、文件、目录、各种数据类型、流、网址、媒体类型、线程或进程进行处理

    QtGui:图形化窗口组件和及相关类。包括如按钮、窗体、状态栏、滑块、位图、颜色、字体等等

    QtHelp:包含了用于创建和查看可查找的文档的类

    QtNetwork:包括网络编程的类。用来编写TCP/IP和UDP的客户端和服务器

    QtOpenGL:使用OpenGL库来渲染3D和2D图形

    QtScript:包含了使PyQt应用程序使用JavaScript解释器编写脚本的类

    QtSql:提供操作数据库的类

    QtSvg:提供了显示SVG文件内容的类。可缩放矢量图形(SVG)

    QtTest:包含了对PyQt应用程序进行单元测试的功能

    QtWebKit:实现了基于开源浏览器引擎WebKit的浏览器引擎

    QtXml:处理XML文件的类,该模块提供了SAX和DOM API的接口

    QtXmlPatterns:包含的类实现了对XML和自定义数据模型的XQuery和XPath的支持

    phonon:包含的类实现了跨平台的多媒体框架,可以在PyQt应用程序中使用音频和视频内容

    QtMultimedia:提供了低级的多媒体功能,通常更多使用 phonon 模块

    QtAssistant:包含的类允许集成 Qt Assistant 到PyQt应用程序中,提供在线帮助。

    QtDesigner:包含的类允许使用PyQt扩展 Qt Designer 。

    Qt:综合了上面描述的模块中的类到一个单一的模块中。

    这样做的好处是你不用担心哪个模块包含哪个特定的类,坏处是加载进了整个Qt框架,从而增加了应用程序的内存占用。

    uic:包含的类用来处理.ui文件,该文件由Qt Designer创建,用于描述整个或者部分用户界面。

    它包含的加载.ui文件和直接渲染以及从.ui文件生成Python代码为以后执行的类。

    先记录简单的,以下代码可显示一个基本的window: 

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui
    
    
    def main():
    
        app = QtGui.QApplication(sys.argv)
    
        w = QtGui.QWidget()
        w.resize(250, 150)
        w.move(300, 300)
        w.setWindowTitle('Simple')
        w.show()
    
        sys.exit(app.exec_())
    
    
    if __name__ == '__main__':
        main()

    from PyQt4 import QtGui,基本的GUI组件都存放在QtGui这个模块

    app = QtGui.QApplication(sys.argv),
    每个Pyqt的程序都必须创建一个application对象,application在 QtGui 模块中,sys.argv 参数是命令行中的一组参数。

    w = QtGui.QWidget(),创建窗口对象,QWidget窗口组件是PyQt4中所有用户界面对象的基类,这里直接使用QWidget默认的构造。

    app.exec_()其实就是QApplication的方法,原来这个exec_()方法的作用是“进入程序的主循环直到exit()被调用”,如果没有这个方法,运行的时候窗口会闪退,所以show是有发挥作用的,但没有使用exec_(),所以没有进入程序的主循环就直接结束了。于是修改代码:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui
    
    
    def main():
    
        app = QtGui.QApplication(sys.argv)
    
        w = QtGui.QWidget()
        w.resize(250, 150)
        w.move(300, 300)
        w.setWindowTitle('Simple')
        w.show()
    
        app.exec_()
    
    
    if __name__ == '__main__':
        main()

    不用sys.exit(app.exec_()),只使用app.exec_(),程序一样可以正常运行,但是关闭窗口后进程却不会退出,尝试print输出app.exec_()的结果,返回0,于是再做修改:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui
    
    
    def main():
    
        app = QtGui.QApplication(sys.argv)
    
        w = QtGui.QWidget()
        w.resize(250, 150)
        w.move(300, 300)
        w.setWindowTitle('Simple')
        w.show()
        
        app.exec_()
        sys.exit(0)
    
    if __name__ == '__main__':
        main()
    这样的话,运行时打开窗口也正常,退出时进程也可以结束了。所以才可以这么用sys.exit(app.exec_())。
    增加图标:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui
    
    
    class Icon(QtGui.QWidget):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
    
            self.setGeometry(300, 300, 250, 150)
            # 设置初始位置
            self.setWindowTitle('Icon')
            # window标题
            self.setWindowIcon(QtGui.QIcon('icons/web.png'))
            # 图标文件位置
    
    app = QtGui.QApplication(sys.argv)
    icon = Icon()
    icon.show()
    sys.exit(app.exec_())

      图标显示效果
    移动到视窗范围内触发提示信息:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui
    
    
    class Tooltip(QtGui.QWidget):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
    
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('Tooltip')
    
            self.setToolTip('This is a <b>QWidget</b> widget')
            # 设置提示信息
            QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
            # 显示字体,在MAC下无效
    
    app = QtGui.QApplication(sys.argv)
    tooltip = Tooltip()
    tooltip.show()
    sys.exit(app.exec_())

      提示效果
    退出时弹出确认消息框:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui
    
    
    class MessageBox(QtGui.QWidget):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
    
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('message box')
    
        def closeEvent(self, event):
    
            # 关闭窗口的事件触发消息框询问,并设置消息框标题,提示信息,选择按键
            reply = QtGui.QMessageBox.question(self, 'Message',
                                               "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
    
            if reply == QtGui.QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
    
    app = QtGui.QApplication(sys.argv)
    qb = MessageBox()
    qb.show()
    sys.exit(app.exec_())

      提示效果

    设置窗口居中显示:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui
    
    class Center(QtGui.QWidget):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
    
            self.setWindowTitle('center')
            self.resize(250, 150)
            # 重新设置大小
            self.center()
    
        def center(self):
            screen = QtGui.QDesktopWidget().screenGeometry()
            # 获取屏幕分辨率
            size =  self.geometry()
            # 获取组件大小
            self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
    
    
    app = QtGui.QApplication(sys.argv)
    qb = Center()
    qb.show()
    sys.exit(app.exec_())

     文档中简单的使用范例,添加注释后做个记录

  • 相关阅读:
    为什么大多Virtual Globe程序纵向旋转效率比较低
    惠普卖印刷服务 GIS卖什么?
    OpenLayers的新功能:矢量支持
    Google部分开源GMap API
    为OpenLayers 2.3添加Overview窗口
    从Grid控件到GIS软件
    GIS(数据)浏览器的点点滴滴
    ArcGIS 9.3和ArcGIS 10,一点感想
    关注:Pitney Bowes以4.08亿美金收购Mapinfo
    ArcGIS Server安装的几个问题
  • 原文地址:https://www.cnblogs.com/shadow-ccos/p/5176043.html
Copyright © 2011-2022 走看看