PyQt4 学习笔记-1

  1. 首先是一个简单的程序

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()

      

      代码运行的结果是一个题目名字是 Simple 的简单窗口。

      顾名思义,在PyQt 中,关于GUI的一系列的object模块都存放在 PyQt.QtGui 中。从PyQt中导入这个模块。


    app = QtGui.QApplication(sys.argv)

      

       使用 QtGui.QApplication 方法创建一个应用。sys.argv 是从 command line 中得到的参数(作为初学者这一点还有些迷惑,可以参见这个博文 http://blog.csdn.net/vivilorne/article/details/3863545 或者官方文档搜索 )


    w = QtGui.QWidget()

    

        使用 QWidget 函数创建这个应用的窗口。QWidget是创建窗口的 default constructor,没有父类。


    w.resize(250, 150)
    w.move(300, 300)

      

         对窗口的尺寸进行操作。resize 的参数是(宽,高),move 的参数是(x,y)


    w.setWindowTitle('Simple')
    w.show()

       

        对窗口进行命名之后,窗口会在内存中创建,并在屏幕上被打印出来。


    sys.exit(app.exec_())

       

        在结束整个程序时 app.exec_() 会返回一个状态码 0,而 sys.exit 则会读取这个状态码然后退出。



2. 现在在窗口上加入一个图标

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):
    
    def __init__(self):
    
        super(Example, self).__init__()        
        self.initUI()      
        
    def initUI(self):
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QtGui.QIcon('web.png'))        
    
        self.show()       
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

      

          这段代码是使用object的方式。首先,在 mian 函数中,使用 QApplication 方法创建应用。其次,创建ex。


    def __init__(self):
    
        super(Example, self).__init__()
        self.init()

       

         example是继承自QWidget的类,使用super首先调用QWidget的constructor。 self.init()将创建GUI授权给了init方法


    def initUI(self):
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QtGui.QIcon('web.png'))        
    
        self.show()

       

       在init方法中,在窗口中创建图标的是self.setWindowIcon(QtGui.QIcon('web.png')). 其中QtGui.QIcon类被创建是接收被打印成图标的图片文件的路径。之后setWindowIcon方法把QtGui.Icon对象打印成窗口的图标。


 http://www.crifan.com/summary_the_meaning_of_self_and___init___in_python_and_why_need_them/

 http://www.cnblogs.com/dkblog/archive/2011/02/24/1980654.html

(这两篇文章有比较详细的解释 self __init 以及 super 的含义及使用)


3. Button

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):
    
    def __init__(self):
        super(Example, self).__init__()
        
        self.initUI()
        
    def initUI(self):
        
        QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
        self.setToolTip('This is a <b>QWidget</b> widget')
        
        btn = QtGui.QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)       
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Tooltips')    
        self.show()
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

       

        给窗口创建一个button


        QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
        self.setToolTip('This is a <b>QWidget</b> widget')

       

       QTooltip 方法,给窗口添加一个 tooltip。QFont 方法规定 tooltip 的字体以及大小,再由setFont方法进行设置。setToolTip方法则设置了tooltip的文本内容。<b>QWidget</b>则表示这一段的文本是加黑的。需要注意的是,由于self的类是QWidget,也就是说self对应的是创建的窗口,所以tooltip是这个窗口的tooltip


        btn = QtGui.QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)

      

        QPushButton方法在窗口中创建一个名字为Button的按键。btn.setTooltip是给这个btn创建一个tooltip。然后使用resize和move方法规定大小和位置 


4. QtCore

import sys
from PyQt4 import QtGui, QtCore


class Example(QtGui.QWidget):
    
    def __init__(self):
    
        super(Example, self).__init__()
        self.initUI()
        
    def initUI(self):               
        
        qbtn = QtGui.QPushButton('Quit', self)
        qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')    
        self.show()
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

        这是创建了一个退出按钮。PyQt中关于Quit的模块是放在QtCore当中,因此,import QtCore。

        qbtn = QtGui.QPushButton('Quit', self)
        qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)

        

          使用QPushButton方法创建了一个按钮。clicked.connect方法将这个按钮的功能与参数联系起来,赋予按钮退出的功能


5. MessageBox

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):
    
    def __init__(self):
        super(Example, self).__init__()
        
        self.initUI()
        
        
    def initUI(self):               
        
        self.setGeometry(300, 300, 250, 150)        
        self.setWindowTitle('Message box')    
        self.show()
        
        
    def closeEvent(self, event):
        
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes | 
            QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()        
        
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

        

          我们可以看到,添加了一个新的方法,CloseEvent 用来处理关闭事件


        reply = QtGui.QMessageBox.question(self, 'Message',"Are you sure to quit?", QtGui.QMessageBo                x.Yes|QtGui.QMessageBox.No, QtGui.QMessageBox.No)

       

          'Message’是MessageBox的标题,而‘Are you sure to quit?’ 则是内容,第三个参数是出现在窗口上的两个选项,Yes和No。而最后一个则是默认选项。reply则接收选择的结果。


        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

        

       然后由这个if-else语句来判断对窗口的操作。(这里我也是有个疑问,程序中没有什么地方说明了这是在关闭窗口的时候才会触发的 messagebox?为什么只有关闭窗口这一项操作的时候才会有这个reply?)



6. Postion

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):
    
    def __init__(self):
        super(Example, self).__init__()
        
        self.initUI()
        
    def initUI(self):               
        
        self.resize(250, 150)
        self.center()
        
        self.setWindowTitle('Center')    
        self.show()
        
    def center(self):
        
        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
        
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

      

       可以看到新建了一个center方法,其中frameGeometry是获得窗口的像素大小,然后创建一个相同大小的矩形。cp则是通过解析屏幕的像素获得屏幕中心的位置。movecenter方法将这个矩形移动到screen的中心。而self的move方法则将窗口的左上角移动到矩形的左上角,因而相当于将窗口移动到矩形的位置,也就是screen的中心位置。 



你可能感兴趣的:(python,pyqt4)