PySide 简易教程<二>-------工欲善其事,必先利其器
2013-12-11 11:45
344 查看
OK,在Linux的开发环境下,对于我们的简短的PySide程序而言,不需要使用QtCreator,使用文本编辑器。之所以,使用文本编辑器,是因为小应用代码量很少,更重要的是一行行的写可以加深我们对于Qt应用的理解。不过,当我们对整个程序的结构有着比较清晰的认识之后,我们就只需要将精力关注在那些发生改变的部分即可。在这里,我推荐VIM和一个叫做snipmate的插件。
在HelloPySide中,我们写了一个经典的HelloWorld。它在我的Fedora上的实现效果如下:
感觉看起来还不错,但是这个界面的显示只是一个QLabel元素,加上Font属性的HelloWorld,并且显示在屏幕的左上角。距离我们想要的东西还差的很远。
我读大学的时候学习了一门SSD课程,SSD4吧(记不太清楚,好像使用VB)是专门讲界面设计的一些原则的课程。一个界面至少应该有标题,大小,菜单栏,工具栏,状态栏甚至应该具有某些布局等等,并且要考虑到用户的一些使用习惯等等,例如获取焦点,自动切换,以用户为中心的人机交互设计。但是对于HelloWorld而言,它没有自定义的标题,大小是由字体决定等等。万幸的是,Qt给我们提供了丰富的元素来创建这些内容,只需要设置好这些元素的规则即可。
接下来我们使用Widget来创建一个HelloWorld。它应该具有以下的特点,大小,标题。
第十一行:使用QWidget创建一个Widget对象
第十二行:重新设置Widget的大小,宽度250,高度150
第十三行:设置窗口标题HelloWorld
第十四行:在widget上添加一个label,注意要将widget作为一个参数传递给QLabel
第十五行:将label移动到距离widget顶端距离50,左边距离50的位置
效果如下图:
比第一个寒酸的界面显得更加大气一点了。但是我们的代码这样写就会很乱,如果继续添加QPushButton,其他处理等等,不方便管理。既然我们使用一个QWidget类,何不继承它,将需要进行的操作放在子类中。这一点和JAVA的界面编程风格类似。所以对以上代码进行重构:
本版本中采用OOP的编程思想:类,数据和方法。这里创建了一个Example类,Example类继承QWidget。因此,在构造函数中,需要调用超类的构造函数。
这样做的好处就是,可以是我们将注意力集中在对整个界面上的编程中,无需关注其他重复的内容。这也是往下的一个基础框架,以后所有的程序都将在如下框架的基础上完成,那么请在vim插件中的python.snippetst中添加自定义的触发器,我的配置如下:
打开vim,进入插入模式,输入#,按下tab,vim就会自动给你补全开篇三行。接下来,输入qt,按下tab,就会把整个框架放在你的vim中。
在HelloPySide中,我们写了一个经典的HelloWorld。它在我的Fedora上的实现效果如下:
感觉看起来还不错,但是这个界面的显示只是一个QLabel元素,加上Font属性的HelloWorld,并且显示在屏幕的左上角。距离我们想要的东西还差的很远。
我读大学的时候学习了一门SSD课程,SSD4吧(记不太清楚,好像使用VB)是专门讲界面设计的一些原则的课程。一个界面至少应该有标题,大小,菜单栏,工具栏,状态栏甚至应该具有某些布局等等,并且要考虑到用户的一些使用习惯等等,例如获取焦点,自动切换,以用户为中心的人机交互设计。但是对于HelloWorld而言,它没有自定义的标题,大小是由字体决定等等。万幸的是,Qt给我们提供了丰富的元素来创建这些内容,只需要设置好这些元素的规则即可。
接下来我们使用Widget来创建一个HelloWorld。它应该具有以下的特点,大小,标题。
#!/usr/bin/python #coding:utf-8 #Filename:WigetHelloWorld.py importsys fromPySide.QtCoreimport* fromPySide.QtGuiimport* app=QApplication(sys.argv) widget=QWidget() widget.resize(250,150) widget.setWindowTitle("HelloWorld") label=QLabel("<fontcolor=redsize=30>Helloworld</font>",widget) label.move(50,50) widget.show() sys.exit(app.exec_())
第十一行:使用QWidget创建一个Widget对象
第十二行:重新设置Widget的大小,宽度250,高度150
第十三行:设置窗口标题HelloWorld
第十四行:在widget上添加一个label,注意要将widget作为一个参数传递给QLabel
第十五行:将label移动到距离widget顶端距离50,左边距离50的位置
效果如下图:
比第一个寒酸的界面显得更加大气一点了。但是我们的代码这样写就会很乱,如果继续添加QPushButton,其他处理等等,不方便管理。既然我们使用一个QWidget类,何不继承它,将需要进行的操作放在子类中。这一点和JAVA的界面编程风格类似。所以对以上代码进行重构:
#!/usr/bin/python #coding:utf-8 #Filename:WigetHelloWorld.py importsys fromPySide.QtCoreimport* fromPySide.QtGuiimport* classExample(QWidget): def__init__(self): super(Example,self).__init__() self.initUI() definitUI(self): label=QLabel("<fontcolor=redsize=30>HelloWorld</font>",self) label.move(50,50) self.setGeometry(300,300,250,150) self.setWindowTitle("HelloWorld") self.show() defmain(): app=QApplication(sys.argv) ex=Example() sys.exit(app.exec_()) if__name__=="__main__": main()
本版本中采用OOP的编程思想:类,数据和方法。这里创建了一个Example类,Example类继承QWidget。因此,在构造函数中,需要调用超类的构造函数。
self.setGeometry(300,300,250,150) setGeometry的功能主要有两个:定位Widget在桌面上的位置和设置窗口的大小,前两个参数设置距离屏幕left和top的距离,后两个参数设置窗口的高和宽。
这样做的好处就是,可以是我们将注意力集中在对整个界面上的编程中,无需关注其他重复的内容。这也是往下的一个基础框架,以后所有的程序都将在如下框架的基础上完成,那么请在vim插件中的python.snippetst中添加自定义的触发器,我的配置如下:
snippet#
#!/usr/bin/python
#coding:utf-8
#Filename:${1:filename}
snippetqt
importsys
fromPySide.QtCoreimport*
fromPySide.QtGuiimport*
class${1:classname}:
def__init__(self):
super(${2:classname},self).__init__()
self.initUI()
definitUI(self):
${3:initUI}
defmain():
app=QApplication(sys.argv)
${4:TODO}
sys.exit(app.exec_())
if__name__=="__main__":
main()
打开vim,进入插入模式,输入#,按下tab,vim就会自动给你补全开篇三行。接下来,输入qt,按下tab,就会把整个框架放在你的vim中。
相关文章推荐
- PySide 简易教程<一>-------Hello PySide
- PySide 简易教程<三>-------动手写起来
- PySide 简易教程<一>-------Hello PySide
- Android实战简易教程<十>(画廊组件Gallery实用研究)
- Android实战简易教程<十九>(SwipeRefreshLayout下拉刷新使用实例)
- Android实战简易教程<五十一>(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
- Android实战简易教程<二十七>(Android设置头像上传功能实现)
- Libusb开发教程<二> API介绍与使用
- Android实战简易教程<五十>(工具类的测试)
- Android实战简易教程<四十二>(github实用控件推荐BadgeView-图标左上角消息提示控件)
- Android实战简易教程<二十六>(基于ViewPager实现微信页面切换效果)
- Java 结构体之 JavaStruct 使用教程<二> JavaStruct 用例分析
- Android实战简易教程<二十>(GridView长按显示删除)
- Android实战简易教程<四十一>(显示倒计时的Button-适用于获取验证码)
- Android实战简易教程<二十五>(基于Baas的数据表查询下拉刷新和上拉加载实现!)
- Android实战简易教程<四十九>(两种方式实现网络图片异步加载)
- Android实战简易教程<四十>(窃听风云之短信监听)
- Android实战简易教程<二十一>(GridView动态添加Item)
- Android实战简易教程<四十八>(App引导页面效果实现)
- Android实战简易教程<三十九>(第三方短信验证平台Mob和验证码自动填入功能结合实例)