官方文档: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_())
文档中简单的使用范例,添加注释后做个记录