PyQt4 學習筆記-1

  1. 首先是一個簡單的程序html

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 的簡單窗口。python

      顧名思義,在PyQt 中,關於GUI的一系列的object模塊都存放在 PyQt.QtGui 中。從PyQt中導入這個模塊。web


    app = QtGui.QApplication(sys.argv)

      

       使用 QtGui.QApplication 方法建立一個應用。sys.argv 是從 command line 中獲得的參數(做爲初學者這一點還有些迷惑,能夠參見這個博文 http://blog.csdn.net/vivilorne/article/details/3863545 或者官方文檔搜索 )app


    w = QtGui.QWidget()

    

        使用 QWidget 函數建立這個應用的窗口。QWidget是建立窗口的 default constructor,沒有父類。函數


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

      

         對窗口的尺寸進行操做。resize 的參數是(寬,高),move 的參數是(x,y)字體


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

       

        對窗口進行命名以後,窗口會在內存中建立,並在屏幕上被打印出來。ui


    sys.exit(app.exec_())

       

        在結束整個程序時 app.exec_() 會返回一個狀態碼 0,而 sys.exit 則會讀取這個狀態碼而後退出。spa



2. 如今在窗口上加入一個圖標.net

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。
code


    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的中心位置。 

相關文章
相關標籤/搜索