官方文檔:http://zetcode.com/gui/pyqt4/
中文文檔:http://www.qaulau.com/books/PyQt4_Tutorial/index.html
QtCore:核心的非GUI功能,對時間、文件、目錄、各種數據類型、流、網址、媒體類型、線程或進程進行處理
QtGui:圖形化窗口組件和及相關類。包括如按鈕、窗體、狀態欄、滑塊、位圖、顏色、字體等等
QtHelp:包含了用於創建和查看可查找的文檔的類
QtNetwork:包括網絡編程的類。用來編寫TCP/IP和UDP的客戶端和服務器
QtOpenGL:使用OpenGL庫來渲染3D和2D圖形
QtScript:包含了使PyQt應用程序使用JavaScript解釋器編寫腳本的類
QtSql:提供操作數據庫的類
QtSvg:提供了顯示SVG文件內容的類。可縮放矢量圖形(SVG)
QtTest:包含了對PyQt應用程序進行單元測試的功能
QtWebKit:實現了基於開源瀏覽器引擎WebKit的瀏覽器引擎
QtXml:處理XML文件的類,該模塊提供了SAX和DOM API的接口
QtXmlPatterns:包含的類實現了對XML和自定義數據模型的XQuery和XPath的支持
phonon:包含的類實現了跨平台的多媒體框架,可以在PyQt應用程序中使用音頻和視頻內容
QtMultimedia:提供了低級的多媒體功能,通常更多使用 phonon 模塊
QtAssistant:包含的類允許集成 Qt Assistant 到PyQt應用程序中,提供在線幫助。
QtDesigner:包含的類允許使用PyQt擴展 Qt Designer 。
Qt:綜合了上面描述的模塊中的類到一個單一的模塊中。
這樣做的好處是你不用擔心哪個模塊包含哪個特定的類,壞處是加載進了整個Qt框架,從而增加了應用程序的內存占用。
uic:包含的類用來處理.ui文件,該文件由Qt Designer創建,用於描述整個或者部分用戶界面。
它包含的加載.ui文件和直接渲染以及從.ui文件生成Python代碼為以后執行的類。
先記錄簡單的,以下代碼可顯示一個基本的window:
#!/usr/bin/python # -*- coding: utf-8 -*- 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()
from PyQt4 import QtGui,基本的GUI組件都存放在QtGui這個模塊
app = QtGui.QApplication(sys.argv),每個Pyqt的程序都必須創建一個application對象,application在 QtGui 模塊中,sys.argv 參數是命令行中的一組參數。
w = QtGui.QWidget(),創建窗口對象,QWidget窗口組件是PyQt4中所有用戶界面對象的基類,這里直接使用QWidget默認的構造。
app.exec_()其實就是QApplication的方法,原來這個exec_()方法的作用是“進入程序的主循環直到exit()被調用”,如果沒有這個方法,運行的時候窗口會閃退,所以show是有發揮作用的,但沒有使用exec_(),所以沒有進入程序的主循環就直接結束了。於是修改代碼:
#!/usr/bin/python # -*- coding: utf-8 -*- 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() app.exec_() if __name__ == '__main__': main()
不用sys.exit(app.exec_()),只使用app.exec_(),程序一樣可以正常運行,但是關閉窗口后進程卻不會退出,嘗試print輸出app.exec_()的結果,返回0,於是再做修改:
#!/usr/bin/python # -*- coding: utf-8 -*- 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() app.exec_() sys.exit(0) if __name__ == '__main__': main()
這樣的話,運行時打開窗口也正常,退出時進程也可以結束了。所以才可以這么用sys.exit(app.exec_())。
增加圖標:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui class Icon(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250, 150) # 設置初始位置 self.setWindowTitle('Icon') # window標題 self.setWindowIcon(QtGui.QIcon('icons/web.png')) # 圖標文件位置 app = QtGui.QApplication(sys.argv) icon = Icon() icon.show() sys.exit(app.exec_())
圖標顯示效果
移動到視窗范圍內觸發提示信息:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui class Tooltip(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Tooltip') self.setToolTip('This is a <b>QWidget</b> widget') # 設置提示信息 QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10)) # 顯示字體,在MAC下無效 app = QtGui.QApplication(sys.argv) tooltip = Tooltip() tooltip.show() sys.exit(app.exec_())
提示效果
退出時彈出確認消息框:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui class MessageBox(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('message box') def closeEvent(self, event): # 關閉窗口的事件觸發消息框詢問,並設置消息框標題,提示信息,選擇按鍵 reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: event.accept() else: event.ignore() app = QtGui.QApplication(sys.argv) qb = MessageBox() qb.show() sys.exit(app.exec_())
提示效果
設置窗口居中顯示:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui class Center(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setWindowTitle('center') self.resize(250, 150) # 重新設置大小 self.center() def center(self): screen = QtGui.QDesktopWidget().screenGeometry() # 獲取屏幕分辨率 size = self.geometry() # 獲取組件大小 self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2) app = QtGui.QApplication(sys.argv) qb = Center() qb.show() sys.exit(app.exec_())
文檔中簡單的使用范例,添加注釋后做個記錄