PyQt4入门教程2.docx
《PyQt4入门教程2.docx》由会员分享,可在线阅读,更多相关《PyQt4入门教程2.docx(11页珍藏版)》请在冰豆网上搜索。
PyQt4入门教程2
PyQt4入门教程
(2)
注:
文中译者的话将用方括号【】标出。
这一部分我们将学习PyQt中一些基本的函数。
一个简单的例子
这是一个能够显示出一个窗口的简单例子。
目前为止我们已经可以对这个窗口干很多事情了,比如说改变它的尺寸,最大化,最小化……干这些事情本来需要写很多代码,但是PyQt已经帮我们写好啦【开心】,由于干这些事情的代码在绝大多数应用中都会重复使用,所以没有必要一遍一遍地写这些代码。
我们可以感受到PyQt4是一个很高级的工具库,如果我们用一些比较低级的工具库的话,完成下面这些代码干的事情可能需要敲几百行代码!
#-*-coding:
utf-8-*-
"""
Inthisexample,wecreateasimple
windowinPyQt4.
"""
importsys
fromPyQt4importQtGui
defmain():
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()12345678910111213141516171819202122232425261234567891011121314151617181920212223242526
上面这些代码可以在屏幕中显示出一个小窗口,大家试一试。
接下来我们一句一句地讲解这些代码。
importsys
fromPyQt4importQtGui1212
这里我们导入了一些必要的组件,其中基本的GUI部件是包含在QtGui模块中的。
app=QtGui.QApplication(sys.argv)11
每一个PyQt4应用都必须创建一个应用(application)对象,这个应用对象位于QtGui模块中。
其中的sys.argv参数是由命令行参数组成的列表(list)。
Python脚本也可以从shell中运行,这是我们控制脚本启动的一种方式。
【这里暂时不理解也没有关系,影响不大,记住要创建application就行】
w=QtGui.QWidget()11
QtGui.QWidget是PyQt4所有用户接口对象中的基础类库。
我们在这里调用了QtGui.QWidget的默认构造函数,这个构造没有父对象。
我们把没有父对象的部件(widget)叫做窗口(window)。
【这里对于父对象暂时也不需要理解,理解不到也没关系。
这句中我们就是创造了一个没有父对象的部件,也就是创建了一个窗口w。
】
w.resize(250,150)11
很好理解,resize()方法可以调整部件的大小,我们把它调整成了250px宽,150px高。
w.move(300,300)11
move()方法将我们的部件移动到了屏幕上坐标为x=300,y=300的地方。
【注:
屏幕的坐标是以左上角为原点的,横着是x轴,竖着是y轴。
】
w.setWindowTitle('Simple')11
这里我们设定了部件(其实是个窗口)的标题,标题将在标题栏中显示。
w.show()11
show()方法使我们创建的部件能够在屏幕上显示出来。
部件先在内存(memory)中被创建,之后再被显示到屏幕上。
sys.exit(app.exec_())11
在显示了窗口之后,我们进入了程序的主循环,并且开始处理时间。
主循环从窗口接收事件并对部件进行处理。
如果我们调用exit()函数或者关闭最主要的部件,主循环将终止。
这里的sys.exit()调用保证程序完全退出。
值得一提的是exec_()中有一个下划线,为什么呢?
因为exec是一个Python关键字,因此加了下划线。
最后,我们运行程序,就会得到下面这个简单的窗口。
应用的图标
应用图标是那个在应用窗口左上角显示的那个东西。
下面这个例子展示了如何在PyQt4中定制应用图标。
我们还会介绍一些新的函数。
#-*-coding:
utf-8-*-
"""
Thisexampleshowsanicon
inthetitlebarofthewindow.
"""
importsys
fromPyQt4importQtGui
classExample(QtGui.QWidget):
def__init__(self):
super(Example,self).__init__()
self.initUI()
definitUI(self):
self.setGeometry(300,300,250,150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('web.png'))
self.show()
defmain():
app=QtGui.QApplication(sys.argv)
ex=Example()
sys.exit(app.exec_())
if__name__=='__main__':
main()1234567891011121314151617181920212223242526272829303132333435363712345678910111213141516171819202122232425262728293031323334353637
是不是感觉画风突变?
那是因为我们在第一个例子中使用的是过程式编程风格。
Python语言同时支持过程式编程和面向对象编程风格,上面这个例子就是用面向对象的编程风格编写的。
而你需要知道,用PyQt4编程就以为着面向对象编程(OOP)【为什么要用面向对象的编程风格?
务必XX一下。
】
classExample(QtGui.QWidget):
def__init__(self):
super(Example,self).__init__()
...1234512345
在面向对象的编程中最重要的三个东西是类(classes),数据(data)和方法(methods)。
这里我们创建了一个新的类叫做Example,括号中的QtGui.QWidget表明这个Example类是从QtGui.QWidget类继承来的。
这意味着我们为新类写构造函数时需要调用被继承类的构造函数。
super(Example,self)返回了Example的父对象(即QtGui.QWidget),接着我们调用了父对象的构造函数。
注意__init__是Python中的构造函数。
self.initUI()11
这里我们调用了一个我们自己写的initUI()函数来创建GUI。
self.setGeometry(300,300,250,150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('web.png'))123123
由于我们是继承QtGui.QWidget类,我们的新类其实就是一个部件(widget),有widget的所有方法,这三个方法就都出自widget。
我们先来介绍一下setGeometry这个方法,它做了两件事情:
将部件定位并设定了它的大小【其实就是resize和move的混合函数】。
前两个参数是部件相对于父元素的x,y坐标【这里其实是个窗口(window),没有父元素记得吗?
所以是屏幕上的x,y坐标。
】,后两个参数是部件的宽和高。
接下来说一下setWindowIcon这个方法,它设定了应用的图标。
为了做到这一点,我们创建了一个QtGui.QIon对象,创建时的参数就是我们想要的图标的路径。
defmain():
app=QtGui.QApplication(sys.argv)
ex=Example()
sys.exit(app.exec_())
if__name__=='__main__':
main()123456789123456789
启动代码放在了main函数中,我们先创建一个应用(application),然后创建我们定义的新类Example的一个实例ex。
【注意if__name__=='__main__'这个Python中惯用的定义入口点的方式。
】
最后的效果就是这个样子,图标变啦:
显示提示栏
我们可以让鼠标移到部件上时显示提示信息。
#-*-coding:
utf-8-*-
"""
Thisexampleshowsatooltipon
awindowandabutton
"""
importsys
fromPyQt4importQtGui
classExample(QtGui.QWidget):
def__init__(self):
super(Example,self).__init__()
self.initUI()
definitUI(self):
QtGui.QToolTip.setFont(QtGui.QFont('SansSerif',10))
self.setToolTip('ThisisaQWidgetwidget')
btn=QtGui.QPushButton('Button',self)
btn.setToolTip('ThisisaQPushButtonwidget')
btn.resize(btn.sizeHint())
btn.move(50,50)
self.setGeometry(300,300,250,150)
self.setWindowTitle('Tooltips')
self.show()
defmain():
app=QtGui.QApplication(sys.argv)
ex=Example()
sys.exit(app.exec_())
if__name__=='__main__':
main()123456789101112131415161718192021222324252627282930313233343536373839404142123456789101112131415161718192021222324252627282930313233343536373839404142
在这个例子中,我们使两个部件可以显示提示信息。
QtGui.QToolTip.setFont(QtGui.QFont('SansSerif',10))11
这个方法设置了一个用来显示提示信息的字体,我们使用大小10px的SansSerif字体。
self.setToolTip('ThisisaQWidgetwidget')11
为了创建一个提示框,我们调用setTooltip()这个方法,我们还可以使用html标签【厉害吧】。
btn=QtGui.QPushButton('Button',self)
btn.setToolTip('ThisisaQPushButtonwidget')1212
这里我们创建了一个按钮,并给它加上了提示框(Tooltip)。
btn.resize(btn.sizeHint())
btn.mov