OK , 在Linux的开发环境下,对于我们的简短的PySide程序而言,不需要使用QtCreator,使用文本编辑器。之所以,使用文本编辑器,是因为小应用代码量很少,更重要的是一行行的写可以加深我们对于Qt应用的理解。不过,当我们对整个程序的结构有着比较清晰的认识之后,我们就只需要将精力关注在那些发生改变的部分即可。在这里,我推荐VIM和一个叫做snipmate的插件。

在Hello PySide中,我们写了一个经典的Hello World 。 它在我的Fedora上的实现效果如下:

感觉看起来还不错,但是这个界面的显示只是一个QLabel元素,加上Font属性的 Hello World ,并且显示在屏幕的左上角。距离我们想要的东西还差的很远。

我读大学的时候学习了一门SSD课程,SSD4吧(记不太清楚,好像使用VB)是专门讲界面设计的一些原则的课程。一个界面至少应该有标题,大小,菜单栏,工具栏,状态栏甚至应该具有某些布局等等,并且要考虑到用户的一些使用习惯等等,例如获取焦点,自动切换,以用户为中心的人机交互设计。但是对于HelloWorld而言,它没有自定义的标题,大小是由字体决定等等。万幸的是,Qt给我们提供了丰富的元素来创建这些内容,只需要设置好这些元素的规则即可。

接下来我们使用Widget来创建一个HelloWorld。它应该具有以下的特点,大小,标题。

 1 #!/usr/bin/python
 2 #coding:utf-8
 3 #Filename:WigetHelloWorld.py
 4
 5 import sys
 6 from PySide.QtCore import *
 7 from PySide.QtGui import *
 8
 9 app = QApplication(sys.argv)
10
11 widget = QWidget()
12 widget.resize(250,150)
13 widget.setWindowTitle("Hello World")
14 label = QLabel("<font color=red size=30>Hello world </font>",widget)
15 label.move(50,50)
16 widget.show()
17
18 sys.exit(app.exec_())

第十一行:使用QWidget创建一个Widget对象

第十二行:重新设置Widget的大小,宽度250,高度150

第十三行:设置窗口标题 Hello World

第十四行:在widget上添加一个label,注意要将widget作为一个参数传递给QLabel

第十五行:将label移动到距离widget顶端距离50,左边距离50的位置

效果如下图:

比第一个寒酸的界面显得更加大气一点了。但是我们的代码这样写就会很乱,如果继续添加QPushButton,其他处理等等,不方便管理。既然我们使用一个QWidget类,何不继承它,将需要进行的操作放在子类中。这一点和JAVA的界面编程风格类似。所以对以上代码进行重构:

 1 #!/usr/bin/python
 2 #coding:utf-8
 3 #Filename:WigetHelloWorld.py
 4
 5 import sys
 6 from PySide.QtCore import *
 7 from PySide.QtGui import *
 8 class Example(QWidget):
 9   def __init__(self):
10     super(Example,self).__init__()
11     self.initUI()
12   def initUI(self):
13     label = QLabel("<font color=red size=30>Hello World</font>",self)
14     label.move(50,50)
15     self.setGeometry(300,300,250,150)
16     self.setWindowTitle("Hello World")
17     self.show()
18 def main():
19   app = QApplication(sys.argv)
20   ex = Example()
21   sys.exit(app.exec_())
22 if __name__ == "__main__":
23   main()

本版本中采用OOP的编程思想:类,数据和方法。这里创建了一个Example类,Example类继承QWidget。因此,在构造函数中,需要调用超类的构造函数。

self.setGeometry(300,300,250,150) setGeometry的功能主要有两个:定位Widget在桌面上的位置和设置窗口的大小,前两个参数设置距离屏幕left和top的距离,后两个参数设置窗口的高和宽。

 

这样做的好处就是,可以是我们将注意力集中在对整个界面上的编程中,无需关注其他重复的内容。这也是往下的一个基础框架,以后所有的程序都将在如下框架的基础上完成,那么请在vim插件中的python.snippetst中添加自定义的触发器,我的配置如下:

 1 snippet #
 2     #!/usr/bin/python
 3     #coding:utf-8
 4     #Filename:${1:filename}
 5 snippet qt
 6     import sys
 7     from PySide.QtCore import *
 8     from PySide.QtGui import *
 9     class ${1:classname}:
10         def __init__(self):
11             super(${2:classname},self).__init__()
12             self.initUI()
13         def initUI(self):
14             ${3:initUI}
15     def main():
16         app = QApplication(sys.argv)
17         ${4:TODO}
18         sys.exit(app.exec_())
19     if __name__ == "__main__":
20         main()

打开vim,进入插入模式,输入#,按下tab,vim就会自动给你补全开篇三行。接下来,输入qt,按下tab,就会把整个框架放在你的vim中。

转载于:https://www.cnblogs.com/danger/p/3469023.html

PySide 简易教程二-------工欲善其事,必先利其器相关推荐

  1. PySide 简易教程三-------动手写起来

    到目前为止,已经接触的Pyside的界面元素有如下几个:QWidget.QPushButton.QLabel.本次再介绍两个tooltip和messagebox.tooltip是一个鼠标悬浮提示信息, ...

  2. WebGL简易教程——目录

    文章目录 1. 绪论 2. 目录 3. 资源 1. 绪论 最近研究WebGL,看了<WebGL编程指南>这本书,结合自己的专业知识写的一系列教程.之前在看OpenGL/WebGL的时候总是 ...

  3. Ocelot简易教程(二)之快速开始2

    为什么这篇的标题叫"Ocelot简易教程(二)之快速开始2"呢,因为很多朋友跟我说上一篇" Ocelot简易教程(二)之快速开始1"内容太少了,只是简单介绍Oc ...

  4. Android利用zxing生成二维码,识别二维码,中间填充图片超详细、超简易教程

    gayhub上的zxing可用于生成二维码,识别二维码 gayhub地址:https://github.com/zxing/zxing 此文只是简易教程,文末附有完整代码和demo下载地址,进入正题: ...

  5. Ocelot简易教程(二)之快速开始1

    Ocelot是为.net core量身定做的,目前是基于 netstandard2.0进行构建的. .NET Core 2.1中如何使用呢? 安装NuGet package 使用nuget安装Ocel ...

  6. 【CS-Notes】工欲善其事必先利其器(Code、Git、Docker、Linux)

    文章目录 Code工作台(工欲善其事必先利其器) 1.通用工具 1.1.编辑器 1.2.Git 基本版本控制 1.3.Docker容器 2.Linux工作台 2.1.Linux命令 2.2.开发工具 ...

  7. 打造自己本地的渗透测试武器库-工欲善其事必先利其器

    文章目录 打造自己本地的渗透测试武器库-工欲善其事必先利其器 一.安装操作系统 二.安装宝塔 三.安装Docker 四.安装Nessus 五.安装AWVS 六.安装MobSF 七.安装Xray 八.安 ...

  8. Ocelot简易教程(一)之Ocelot是什么

    Ocelot简易教程(一)之Ocelot是什么 原文:Ocelot简易教程(一)之Ocelot是什么 作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/955 ...

  9. mysql游标进阶_mysql进阶(三)游标简易教程

    mysql游标简易教程 从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎.InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键 ...

最新文章

  1. Dubbo源码分析(六)服务引用的具体流程
  2. zabbix监控oracle缓冲区,Zabbix监控oracle各服务器连接数
  3. Hystrix面试 - 基于本地缓存的 fallback 降级机制
  4. php 5 windows,PHP 5.5 正式版发布,不再支持 Windows XP
  5. 详谈java类和对象的生命周期
  6. @Import注解使用及源码分析
  7. excel vba 如何将日期周几转换成文字_Excel 从精通到入门
  8. hadoop JOB的性能优化实践
  9. 隐藏TreeView中SiteMap的根节点
  10. vue 第八天 小结 作业模拟购物车
  11. 解决AngularJS在IE下取数据总是缓存的问题
  12. [精简]托福核心词汇98
  13. java练习题---前五章
  14. PIXI_锚点图片位控
  15. Android H.265硬解码EasyPlayerPro
  16. 【2019-2020春学期】数据库作业9:SQL练习6 - INSERT / UPDATE / DELETE / NULL / VIEW
  17. python爬取抖音粉丝数据_爬取抖音粉丝数据1(作品、喜欢、ID 、关注) 完整源代码...
  18. android tv官网下载地址,emby电视客户端下载
  19. jspdf + html2canvas 导出pdf
  20. mysql 手机号省份_手机号码怎么划分省份

热门文章

  1. 【nosql】NoSql是什么?
  2. SpringMVC的返回值和参数类型
  3. IDEA 配置Tomcat运行Servlet项目
  4. 组件注册@ComponentScan的自动扫描和指定扫描规则
  5. shiro多Realm分别授权
  6. jmeter 配置 slave 代理压测机
  7. Shell基本应用(学习笔记)
  8. Linux下安装MySQL数据库、禅道
  9. 内网穿透工具_utools让你3步搭建一个内网穿透工具
  10. 三相pmsm矢量控制仿真模型_实时控制系统的时序模型及其在AUTOSAR系统仿真监控中的应用-Foundations4.1控制理论...