这是我敲的Python Qt Gui快速编程第六章上的代码,以后可能要用到其中一些,如果忘记了就来这里看看。
#coding=utf-8
#d                                                                                              import os
import platform
import  sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
__version__= "1.0.0"class MainWindow(QMainWindow):def fileNew(self):print 1def addActions(self, target,actions):for action in actions:if action is None:target.addSeparator()else :target.addAction(action)def createAction(self,text,slot=None,shortcut=None,icon=None,tip=None,checkable=False,signal="triggered()"):action  =   QAction(text,self)if icon is not None:action.setIcon(QIcon("web.png"))if shortcut is not None:action.setShortcut(shortcut)if tip is not None:action.setToolTip(tip)action.setStatusTip(tip)if slot is not None:self.connect(action,SIGNAL(signal),slot)if checkable:action.setCheckable(True)return actiondef __init__(self,parent=None):super(MainWindow, self).__init__(parent)self.image  =   QImage()self.dirty  =   False       #作为标志用来说明图片是否未保存修改。self.filename   =   None        #作为标志,用来说明是没有图片还是有尚未保存的新创建图片。self.mirroredvertically =   False   #在实现镜像的时候会用到。self.mirroredhorizontally   =   False#设置主窗口部件self.imageLabel =   QLabel("123456")self.imageLabel.setMinimumSize(200,200)self.imageLabel.setAlignment(Qt.AlignCenter)#设置图片水平和垂直居中对齐。self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu) #查阅了API文档,明白了self.setCentralWidget(self.imageLabel)      #查阅了 API文档,明白了这个方法可以对主窗口中心区域的窗口部件进行布局,也可以重定义该窗口的父对象#设置停靠窗口,logDockWidget   =   QDockWidget("Log", self)    #停靠窗口不能放进布局中,所以除了窗口标题外,还要给定父对象。logDockWidget.setObjectName("LogDockWidget")logDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea|#用这个方法限制其停靠区域Qt.RightDockWidgetArea)self.listWidget =   QListWidget()       #创建列表窗口logDockWidget.setWidget(self.listWidget)        #将列表窗口放进停靠窗口中self.addDockWidget(Qt.RightDockWidgetArea, logDockWidget)       #将停靠窗口添加到主窗口中#设置状态栏信息self.sizeLabel  =   QLabel("456")self.sizeLabel.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken)status  =   self.statusBar()status.setSizeGripEnabled(False)#status.addPermanentWidget(self.sizeLabel,0)       #在查阅了API文档之后,明白了这个意思status.showMessage("Ready",10000)#创建各个动作,File旗下的和Edit旗下的fileNewAction   =   self.createAction("&New",self.fileNew,QKeySequence.New,"web","Create an image file")fileOpenAction  =   self.createAction("&Open",self.fileNew,"Ctrl+O","web","open an image file")editZoomAction  =   self.createAction("&Zoom",self.fileNew,"Alt+Z","web","Zoom the image")editInvertAction    =   self.createAction("&Invert",self.fileNew,"Ctrl+I","web","Invert the image's colors",True,"toggled(bool)")editSwapAndBlue =   self.createAction("Sw&ap Red and Blue",self.fileNew,"Ctrl+A","web","Swap the colors of red and blue",True,"toggled(bool)")mirrorGroup =   QActionGroup(self)editUnMirrorAction  =   self.createAction("&Unmirror",self.fileNew,"Ctrl+U","web","Unmirror the image",True,"toggled(bool)")mirrorHorizon   =   self.createAction("Mirror &Horizon",self.fileNew,"Ctrl+H","web","Mirror horizon the image",False,"toggled(bool)")mirrorVertical  =   self.createAction("Mirror &Vertical",self.fileNew,"Ctrl+V","web","Mirror vetrical the image",False,"toggled(bool)")mirrorGroup.addAction(editUnMirrorAction)mirrorGroup.addAction(mirrorHorizon)mirrorGroup.addAction(mirrorVertical)menubar = self.menuBar()fileMenu = menubar.addMenu('&File')fileMenu.addAction(fileNewAction)editMenu    =   menubar.addMenu("&Edit")self.addActions(editMenu,(editInvertAction,editSwapAndBlue,editZoomAction))mirrorMenu  =   editMenu.addMenu(QIcon("web"),"&Mirror")self.addActions(mirrorMenu,(editUnMirrorAction,mirrorHorizon,mirrorVertical))fileToolbar =  self.addToolBar("file")  #file是这个工具栏的标题fileToolbar.setObjectName("FileToolBar")    #FileToolBar是这个工具栏对象的名字self.addActions(fileToolbar,(fileNewAction,fileOpenAction))editToolbar =   self.addToolBar("Edit")editToolbar.setObjectName("EditToolBar")self.addActions(editToolbar,(editInvertAction,editSwapAndBlue,editUnMirrorAction,mirrorHorizon,mirrorVertical))self.zoomSpinBox    =   QSpinBox()self.zoomSpinBox.setRange(1,400)self.zoomSpinBox.setSuffix("%")self.zoomSpinBox.setValue(100)self.zoomSpinBox.setToolTip("Zoom the image")self.zoomSpinBox.setStatusTip(self.zoomSpinBox.toolTip())#self.zoomSpinBox.setFocusPolicy(Qt.NoFocus)self.connect(self.zoomSpinBox,SIGNAL("valueChanged(int)"),self.showImage)editToolbar.addWidget(self.zoomSpinBox)self.addActions(self.imageLabel,(editInvertAction,editSwapAndBlue,editUnMirrorAction,mirrorVertical,mirrorHorizon))def showImage(self):print 2app =   QApplication(sys.argv)
mainwindow  =   MainWindow()
mainwindow.show()
app.exec_()
1.action  =   QAction(text,self)-----------第21句
每个QObject子类都要有一个父对象(除了顶级窗口),对于窗口部件来说,它们可以通过布局来获得父对象,而对于纯粹的数据对象比如QAction来说,则必须明确地规定其父对象——self
像Qimage不是QObject的子类,所以可以直接:sekf.image=QImage()--------第36句

2.self.setCentralWidget(self.imageLabel)----------第47句
经参考API文档:The widget argument has it's ownership transferred to Qt.Sets the given widget to be the main window's central widget.意思就是括号里面的参数窗口部件的所有权给了MainWindow,就是相当于给它设置了父对象,同时还将imageLabel放在父窗口中间。

3.self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu)---------第46句查得文档,它是这样说的,如果赋予这个参数,那么该窗口将会把该窗口所拥有的动作用在它的右菜单中。

4.logDockWidget   =   QDockWidget("Log", self) --------------第50句QdockWidget是停靠窗口类,停靠窗口是不能加入布局的,所以这里需要给它指明父对象。
5.logDockWidget.setWidget(self.listWidget)-------第55句
self.addDockWidget(Qt.RightDockWidgetArea, logDockWidget)-------第56句
给停靠窗口里面添加窗口需要用setWidget(),其原型为:def setWidget(self, QWidget)
给主窗口里面添加停靠窗口需要用addDockWidget,其原型为:
def addDockWidget(self, Qt_DockWidgetArea, QDockWidget, Qt_Orientation=None)

6.status.setSizeGripEnabled(False)--------第62句
这个属性保存的是在状态条右下方的QSizeGrip是否有效。 可以让状态条右下方的QSizeGrip生效或者失效。默认它是生效的。 通过setSizeGripEnabled()设置属性值并且通过isSizeGripEnabled()来获得属性值。 

7.status.addPermanentWidget(self.sizeLabel,0)-------第63句查阅参考文档:The widget argument has it's ownership transferred to Qt.Adds the given widget permanently to this status bar, reparenting the widget if it isn't already a child of this QStatusBar object. The stretch parameter is used to compute a suitable size for the given widget as the status bar grows and shrinks. The default stretch factor is 0, i.e giving the widget a minimum of space.Permanently means that the widget may not be obscured by temporary messages. It is is located at the far right of the status bar.意思就是将self.sizeLabel的父对象设置成status,并且如果self.sizeLabel不是QStatusBar的子类的话,那么就重新排列结构。后面的Int型参数代表占用status bar的相对位置大小,其中permanently意味着该窗口不会被临时信息覆盖,该窗口呆在状态栏最右边。

8.status.showMessage("Ready",10000)-----第64句。后面的参数表示该信息在状态栏显示的时间,10000ms就是10s。

9.mirrorGroup =   QActionGroup(self)-----第73句。该句创建了一个动作群组的对象,同上,需要给它指定一个父对象。动作群组可以管理一系列的可选型动作,并可确保它所管理的动作只要有一个是开的,那么其他的动作全为关的。

10.menubar = self.menuBar()----第83句同创建状态栏一样,第一次调用menuBar的时候也会创建菜单栏。menuBar()函数属于QMainWindow这个类,其原型为:def menuBar(self),返回值类型为:menuBar(self) -> QMenuBarstatusBar()函数属于QMainWindow这个类,其原型为:def statusBar(self),返回值类型为:
statusBar(self) -> QStatusBar

11.editMenu    =   menubar.addMenu("&Edit")----第86句
mirrorMenu  =   editMenu.addMenu(QIcon("web"),"&Mirror")-----第89句
第一句表示给主菜单里面添加“Edit”这个选项。
第二句表示给editMenu里面添加一个子菜单。 
第三句表示给子菜单里面添加动作。
一二两句同样是addMenu这个函数,但是所属的类是不同的,第一个函数属于的类是QMenuBar,第二个函数属于QMenu。

12.fileToolbar =  self.addToolBar("file")-----第92句
   主窗口里面添加工具栏利用addToolBar这个函数,
   该句的原型addToolBar(self, QString) -> QToolBar,这个QString是该工具栏的标题

13.fileToolbar.setObjectName("FileToolBar")-----第93句
该句给工具栏对象设置了名字,其作用是帮助PyQt区分多个数量的工具栏
就像停靠窗口一样,logDockWidget.setObjectName("LogDockWidget")----第51句

14.self.addActions(editToolbar,(editInvertAction,editSwapAndBlue,editUnMirrorAction,----第97句mirrorHorizon,mirrorVertical))
给工具栏添加动作。
QWidget类都有一个addAction方法,可被QMenu,QMenuBar,QToolBar类继承,这就是为什么可以向这些类添加动作的原因

15.editToolbar.addWidget(self.zoomSpinBox)----109句
查阅文档:
The widget argument has it's ownership transferred to Qt.Adds the given widget to the toolbar as the toolbar's last item.The toolbar takes ownership of widget.利用完此方法后,该选值框的父对象设定为工具栏,并把该选值框放到工具栏的最后一项。

16.self.addActions(self.imageLabel,(editInvertAction,editSwapAndBlue,editUnMirrorAction,mirrorVertical,mirrorHorizon))将动作添加到imageLabel中,







所以在imageLabel中右键,则会弹出该窗口所有的动作指令。另外,只要动作里面没有None就可以这样执行,因为QWidget类里面没有addSeparator这个方法。
self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu)----第46句
该句的右菜单为该imageLabel的动作。
self.addActions(mirrorMenu,(editUnMirrorAction,mirrorHorizon,mirrorVertical))---第90句

Python Qt GUI快速编程第六章代码分析相关推荐

  1. python qt gui快速编程_《PYTHON QT GUI快速编程 PYQT编程指南》源码

    文件名大小更新时间 <PYTHON QT GUI快速编程 PYQT编程指南>源码\chap01\answers.txt9882007-06-27 <PYTHON QT GUI快速编程 ...

  2. python qt gui快速编程 pdf_翻译:《用python和Qt进行GUI编程》——介绍

    介绍: 这本书讲的是如何利用Python和Qt来开发GUI应用程序的.仅仅需要一点点必备的知识:你可以使用一些面相对象的语言来编程,例如C++,C#,java或者python等等.在富文本编辑的那些章 ...

  3. python界面编程pdf_Python Qt GUI快速编程——PyQt编程指南 中文pdf完整版[99MB]

    内容介绍热点排行相关文章下载地址↓ Python Qt GUI快速编程--PyQt编程指南主要讲述如何利用Python和Qt开发GUI应用程序的原理.方法和关键技术.本书共分四个部分:第一部分主要讲述 ...

  4. python qt5 gui快速编程_现货正版 Python Qt GUI与数据可视化编程 pyqt5教程书籍 pyqt5快速开发与实战Qt5 GUI快速编程 计算机网络程序设计人民邮电出版社...

    热销单品 查看更多 > RMB:85.00 立即购买 RMB:63.50 立即购买 RMB:73.50 立即购买 RMB:49.50 立即购买 RMB:127.80 立即购买 RMB:66.00 ...

  5. 新书《Python Qt GUI与数据可视化编程》

    经过一年多写作和出版社的编辑加工,我的第二本书<Python Qt GUI与数据可视化编程>马上就正式上架了,敬请关注. 本书介绍在Python中使用PyQt5和其他模块进行GUI和数据可 ...

  6. 软件开发书籍-Python Qt GUI与数据可视化编程

    Python Qt GUI与数据可视化编程 王维波,栗宝鹃,张晓东 著 ISBN:9787115514165 包装:平装 开本:16开 正文语种:中文 出版社:人民邮电出版社 出版时间:2019-09 ...

  7. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  8. python cgi库_《Python 数据库 GUI CGI编程》

    1. 上次写在前面,我们介绍了一篇关于开始使用Python.今天我们将介绍Python数据库,GUI, CGI编程和Python和Python的区别.2.连接到数据库标准Python数据库接口是Pyt ...

  9. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

最新文章

  1. 设计模式入门:建造者模式
  2. Science:人类迎来目前最为全面的癌症染色质可及性图谱
  3. java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled()Z
  4. SAP FI模块与SD、MM的接口配置基本方法
  5. Oracle 默认时间格式 Date格式转换
  6. 二分查找算法为什么要先排序
  7. Adaboost方法分类新闻数据
  8. 个人博客网站的设计与实现_新手建立个人博客网站后如何提高回访率?
  9. Python中关于进度条的6个实用技巧
  10. web.xml文件的作用
  11. OpenCV萌新福音:易上手的数字识别实践案例
  12. input子系统分析一
  13. 软件测试行业发展前景怎么样?
  14. python的zip_python中的zip()函数
  15. 若依框架----代码生成(详解)
  16. 新版谷歌flash的问题
  17. 十年股市投资回顾与反思
  18. 生命中最重要的是什么?---9人的临终遗言
  19. 20190901笔记默写[mò xiě] write from memory
  20. 周杰 清华大学计算机学院,清华大学自动化系主任周杰教授访问我院并做学术报告...

热门文章

  1. 【ABAP】SAP销售订单定价值变更
  2. 【MM模块】Batch 批次管理 2
  3. PP: 混合生产方式(MTO与MTS为例)
  4. SoapUI启动报错:The JVM could not be started. The maximum heap size (-Xmx) might be too large
  5. SAP新总账下的利润中心内部转移定价
  6. SAP成本收集器两则
  7. 100小时学会sap-财务篇fico总结介绍篇
  8. 如何用C语言清空特定文件夹中的所有文件
  9. DYNP_VALUES_READ
  10. 搅动金融科技的人工智能,能否颠覆支付格局?