首先是一個簡單的程序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的中心位置。