PyQt4教程系列一:基本介绍和入门

栏目: 编程工具 · 发布时间: 6年前

内容简介:PyQt是一个GUI控件工具箱,是Qt的Python接口。PyQt有两个主要版本:PyQt 4.x和PyQt 5.x,两者不兼容,且前者基于Python 2和Python 3,后者仅基于Python 3。Linux下载安装:

PyQt是一个GUI控件 工具 箱,是Qt的 Python 接口。

PyQt有两个主要版本:PyQt 4.x和PyQt 5.x,两者不兼容,且前者基于Python 2和Python 3,后者仅基于Python 3。

Linux下载安装:

sudo apt-get install python-qt4
or 
sudo apt-get install pyqt5-dev-tools

PyQt4由以下Modules组成:QtCore、QtGui、QtNetwork、QtXml、QtSvg、QtOpenGL、QtSql。

  • QtCore包含非GUI的核心功能,用来处理时间、文件和目录、数据类型、流、URL、MIME类型、线程和进程。
  • QtGui包含图形组件及相关类,比如按钮、窗口、状态栏、工具栏、滑块、位图、颜色、字体等。
  • QtNetwork包含网络编程的相关类,比如用于TCP/IP和UDP服务端和客户端的编程。
  • QtXml包含处理XML文件的类,提供了用于SAX和DOM这些API的实现。
  • QtSvg提供了显示SVG文件内容的类。
  • QtOpenGL使用OpenGL库来处理2D和3D的图像,将Qt GUI库和OpenGL库无缝链接起来。
  • QtSql包含处理数据库的类。

Hello World

使用PyQt创建”Hello World”的步骤如下:

  1. 导入QtGui模块
  2. 创建一个应用对象app
  3. 创建一个QWidget对象w来创建最顶层的窗口,在上面添加一个QLabel对象b
  4. 设置label的标题为“Hello World”
  5. 通过setGeometry()方法定义窗口的尺寸和位置
  6. 通过app.exec()方法来进入应用对象的主体

源码为:

#! /usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
   b = QtGui.QLabel(w)
   b.setText("Hello World!")
   w.setGeometry(100,100,200,50)
   b.move(50,20)
   w.setWindowTitle("PyQt")
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

信号和槽

与一般按顺序执行的控制台模式的应用程序不同,基于GUI的程序是由事件驱动的。事件events是响应用户动作的函数或方法,比如点击按钮、选择项目、鼠标点击等。用来构建GUI界面的挂件Widgets是这些事件的来源。每个PyQt Widget,都派生自QObject类,用来发射“信号”signals来响应一个或多个事件。信号本身不执行动作,它们连接到“槽”slot上。“槽”是可调用的Python函数。

在PyQt中,信号和槽的连接有多种方式。

最常用的方式是:

QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)

更方便的方式是当widget发射signal时,调用slot函数:

widget.signal.connect(slot_function)

以下是两种方式的举例:

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def window():
   app = QApplication(sys.argv)
   win = QDialog()
   b1 = QPushButton(win)
   b1.setText("Button1")
   b1.move(50,20)
   b1.clicked.connect(b1_clicked)

   b2 = QPushButton(win)
   b2.setText("Button2")
   b2.move(50,50)
   QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)

   win.setGeometry(100,100,200,100)
   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())

def b1_clicked():
   print "Button 1 clicked"

def b2_clicked():
   print "Button 2 clicked"

if __name__ == '__main__':
   window()

布局管理

一个widget在窗口中的位置可以通过指定以像素为单位的绝对坐标,该坐标是相对于使用setGeometry()方法定义的窗口的尺寸:

QWidget.setGeometry(xpos, ypos, width, height)

上面这句代码设定了窗口位于显示器的坐标点,以及它的尺寸。

具体的某个widget的位置代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
	
   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)
	
   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

但是这种绝对坐标的方式有一些缺点:

  1. 当window尺寸改变的时候,该widget的位置却不变
  2. 在有不同分辨率的设备上可能显示不统一
  3. 当布局需要改变时,该更改会很费劲,因为需要重新设置位置

PyQt的API针对上述问题提供了一些更优雅的管理widget位置的方法:

  1. QBoxLayout类:垂直或水平地排列widgets。它的派生类是QVBoxLayout(垂直排列)和QHBoxLayout(水平排列)
  2. QGridLayout类:以网格单元的形式排列,包含addWidget()方法。任何Widget都可以通过指定单元的行数和列数来添加
  3. QFormLayout类:可以很方便地创建两列的表格,一列(通常是右列)是输入栏,一列(通常是左列)是相应的标签。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

劫持

劫持

玛丽•K. 斯温格尔(Mari K. Swingle) / 邓思渊 / 中信出版集团股份有限公司 / 2018-5-1 / CNY 59.00

《劫持》是一本探讨人与科技的关系的书,基于一位心理学博士20年的临床经验及其作为神经认知科学研究者的脑—电研究成果。在这本面向大众的科普书中,作者以深入浅出的方式,探讨了手机、电脑等便携式数字设备及让人“永不下线”的互联网对现代人尤其是青少年大脑的影响,从神经认知科学和精神分析的角度,有力地证明了数字媒介与大脑和人类行为的关系,探讨了手机等如何对人的大脑进行劫持或操控,并给出了自己作为从业医师的实......一起来看看 《劫持》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换