zoukankan      html  css  js  c++  java
  • pyqt5之简单窗口的创建

       在学完tkinter后,发现tkinter在布局方面特别的不方便(Tkinter资料:http://effbot.org/tkinterbook/tkinter-index.htm),
    因此学习pyqt5,之前用tkinter写了一个简单的python入门教程的exe,基本都是面向过程的编程思想,
    很少将函数式编程思想和面向对象的思想,在学习pyqt5的过程中,希望培养面向对象编程的思想!
    关于pyqt5的学习主要参考下面的教程,部分知识及代码相当于是对PyQt5 tutorial的总结!
      http://zetcode.com/gui/pyqt5/introduction/

    .pyqt5各个模块功能
    QtCore 模块包含了非GUI的功能设计。
    这个模块被用来实现时间,文件和目录,不同数据类型,流,URL,mime类型,线程和进程。
    QtGui 模块包含的类用于窗口化的系统结构,事件处理,2D绘图,基本图形,字体和文本。
    QtWidgets 模块包含的类提供了一套UI元素来创建经典桌面风格用户界面。
    QtMultimedia 模块包含的类用于处理多媒体内容和链接摄像头和无线电功能的API。
    QtBluetooth 模块包含的类用于扫描蓝牙设备,并且和他们建立连接互动。
    QtNetwork 模块包含的类用于网络编程,这些类使TCP/IP和UDP客户端/服务端编程更加容易和轻便。
    QtPositioning 模块包含的类用于多种可获得资源的位置限定,包含卫星定位,Wi-Fi,或一个文本文件。
    Enginio 模块用于解决客户端访问Qt云服务托管。
    QtWebSockets 模块包含的类用于解决WebSocket通信协议。
    QtWebKit 包含的关于浏览器的类用于解决基于WebKit2的支持库。
    QtWebKitWidgets 模块包含的关于WebKit1的类基本解决浏览器使用基于QtWidgets应用问题。
    QtXml 模块包含的类用于解析XML文件。这个模块提供SAX和DOM API解决方法。
    QtSvg 模块提供类用于显示SVG文件内容。Scalable Vector Graphics (SVG) 是一种语言,
    XML来描述二维图形和图形应用程序。
    QtSql模块提供类驱动数据库工作。
    QtTest 模块包含了方法提供PyQt5应用的单元测试

    . PyQT4 and Pyqt5 fifferences
    不兼容pyqt4, 模块被改写,新模块的引入

    .简单窗口的建立
    没有父类的组件是顶级窗口。
    见例子

    .关闭窗口
    QPushButton(string text, QWidget parent = None)
    text参数是将显示在按钮中的内容。parent参数是一个用来放置我们按钮的组件

    qbtn.clicked.connect(QCoreApplication.instance().quit)
    PyQt5中,事件处理系统由信号&槽机制建立。如果我们点击了按钮,信号clicked被发送。
    槽可以是Qt内置的槽或Python 的一个方法调用。QCoreApplication类包含了主事件循环;
    它处理和转发所有事件。instance()方法给我们返回一个实例化对象。
    注意QCoreAppli类由QApplication创建。点击信号连接到quit()方法,将结束应用。
    事件通信在两个对象之间进行:发送者和接受者。发送者是按钮,接受者是应用对象


      1 import sys
      2 from PyQt5.QtWidgets import (QWidget, QToolTip,
      3     QPushButton, QApplication)
      4 from PyQt5.QtGui import QIcon
      5 from PyQt5.QtGui import QFont
      6 from PyQt5.QtCore import QCoreApplication
      7 
      8 # ----------------------------------------------#
      9 # 简单pyqt5
     10 # ----------------------------------------------#
     11 
     12 
     13 def create_ui():
     14     app = QApplication(sys.argv)    # 所有pyqt5必须创建一个QApplication对象
     15 
     16     w = QWidget()   # 没有父类的widget将被作为窗口使用
     17     w.resize(250, 150)  # 大小
     18     w.move(300, 300)    # 起始坐标
     19     w.setWindowTitle('GUI')  # 标题
     20     w.show()
     21     # 应用进入主循环。在这个地方,事件处理开始执行。
     22     # 主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理。
     23     # 如果我们调用exit()方法或主widget组件被销毁,主循环将退出。
     24     # sys.exit()方法确保一个不留垃圾的退出。
     25     # 系统环境将会被通知应用是怎样被结束的
     26     sys.exit(app.exec_())
     27 
     28 
     29 # ----------------------------------------------#
     30 # pyqt5修改显示图标
     31 # ----------------------------------------------#
     32 class Example1(QWidget):
     33 
     34     def __init__(self):
     35         super().__init__()
     36         # super()方法返回了父类对象并调用了父类的构造方法
     37         self.__init_ui()
     38 
     39     def __init_ui(self):
     40 
     41         self.setGeometry(300, 300, 300, 220)
     42         self.setWindowTitle('GUI')
     43         self.setWindowIcon(QIcon('f.ico'))
     44 
     45         self.show()
     46 
     47 # ----------------------------------------------#
     48 # pyqt5显示提示框
     49 # ----------------------------------------------#
     50 
     51 
     52 class Example2(QWidget):
     53 
     54     def __init__(self):
     55         super().__init__()
     56         self.__init_ui()
     57 
     58     def __init_ui(self):
     59 
     60         # 设置提示框的字体和大小
     61         QToolTip.setFont(QFont('SansSerif', 20))
     62 
     63         # 用于显示组件的提示框
     64         self.setToolTip('This is a <b>QWidget</b> widget')
     65 
     66         # 创建一个按键
     67         btn = QPushButton('Button', self)
     68 
     69         # 为按键创建提示框
     70         btn.setToolTip('This is a <b>QPushButton</b> widget')
     71 
     72         # setHint()方法给了按钮一个推荐的大小
     73         btn.resize(btn.sizeHint())
     74         btn.move(50, 50)
     75 
     76         self.setGeometry(300, 300, 300, 200)
     77         self.setWindowTitle('Tooltips')
     78         self.show()
     79 
     80 # ----------------------------------------------#
     81 # 关闭窗口
     82 # ----------------------------------------------#
     83 
     84 
     85 class Example3(QWidget):
     86 
     87     def __init__(self):
     88         super().__init__()
     89 
     90         self.__init_ui()
     91 
     92     def __init_ui(self):
     93         btn = QPushButton('Quit', self)
     94         btn.clicked.connect(QCoreApplication.instance().quit)
     95         btn.resize(btn.sizeHint())
     96         btn.move(50, 50)
     97 
     98         self.setGeometry(300, 300, 250, 150)
     99         self.setWindowTitle('Quit button')
    100         self.show()
    101 
    102 # 测试简单的创建ui
    103 
    104 
    105 # create_ui()
    106 
    107 app = QApplication(sys.argv)
    108 
    109 # pyqt5修改显示图标
    110 # ex = Example1()
    111 
    112 # pyqt5显示提示框
    113 # ex1 = Example2()
    114 
    115 # pyqt5退出命令,理解信号与槽
    116 ex2 = Example3()
    117 sys.exit(app.exec_())
    
    
    



  • 相关阅读:
    利用libxml2解析xml文档
    找出两个链表的第一个公共结点
    [转载]风雨20年:我所积累的20条编程经验
    inotify监测文件及文件夹
    [转载]linux下svn常用指令
    利用zlib进行数据压缩
    2013腾讯编程马拉松初赛:郑厂长系列故事——体检
    Socket编程之简单介绍
    C语言中static的作用总结
    写程序实现wireshark的抓包功能
  • 原文地址:https://www.cnblogs.com/faithyiyo/p/9823045.html
Copyright © 2011-2022 走看看