1 #面向對象方法 2 import sys 3 from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButton, QMessageBox #窗口組件 4 from PyQt5.QtWidgets import QDesktopWidget #提供桌面窗口信息 5 from PyQt5.QtGui import QIcon, QFont #圖標組件,提示框 6 from PyQt5.QtCore import QCoreApplication 7 8 class Example(QWidget): #建立一個新類叫作Example,Example類繼承自QWidget類。QWidget組件(類)是PyQt5中全部用戶界面類的基礎類。 9 10 def __init__(self): 11 super().__init__() #super()使得Example可使用其父類QWidget的方法 12 self.initUI() 13 14 '''界面主體''' 15 def initUI(self):#initUI()中的下述方法(如'.setblabla')都繼承自QWidgets類。 16 17 QToolTip.setFont(QFont('SansSerif',8))#這句管理了全部的提示框。靜態方法設置了提示框字體的格式,8px大小的SansSerif字體 18 self.setToolTip('This is a <b>QWidget</b> widget')#調用setToolTip方法建立提示框,提交給了self對象。提示框中可使用富文本格式 19 20 #self.setGeometry(300,300,800,540)#在屏幕上顯示窗口,並設置其尺寸。前兩個參數設定位置,後兩個設定寬高。至關因而'.resize()'+'.move()'。 21 ''' 22 這裏的'.setGeometry()'方法,不能讓窗口居中顯示,由於它須要具體的數值。 23 咱們可使用下面的'.resize()'與'.center()'方法來實現修改窗口尺寸和居中顯示。 24 ''' 25 self.resize(800,540) 26 self.center() 27 28 self.setWindowTitle('Ubuntu')#標題 29 self.setWindowIcon(QIcon('linuxcartoon.jpg'))#QIcon對象接收圖片。 30 31 btn = QPushButton(QIcon('linuxcartoon.jpg'),'A Linux',self)#建立一個按鈕組件btn,能夠指定圖標、文本和父對象 32 btn.setToolTip('This is a <b>QPushButton</b> widget')#給btn設置一個提示框,富文本<b>指加粗。 33 btn.resize(btn.sizeHint())#改變btn的大小,'.sizeHint()'返回了一個系統推薦值 34 btn.move(50,50) 35 btn.clicked.connect(self.msg)#連接按鈕觸發事件msg 36 37 qbtn = QPushButton('Quit',self)#第二個參數是父組件。父組件是Example組件,它繼承了QWiget類。 38 qbtn.setToolTip('It\'s a button that means <b>quitting</b> this Ubuntu window') 39 qbtn.clicked.connect(QCoreApplication.instance().quit) 40 qbtn.resize(qbtn.sizeHint()) 41 qbtn.move(200,50) 42 43 self.show() 44 45 46 '''窗口位置方法''' 47 def center(self): 48 qr = self.frameGeometry()#這裏咱們得到一個主窗口輪廓的幾何圖形。 49 ''' 50 一些補充: 51 geometry.width():客戶區的寬度,客戶區:不包括標題欄、邊框 52 geometry.height():客戶區的高度 53 frameGeometry.x():窗口輪廓整個框架左上角的座標x,整個框架:包括邊框和標題欄 54 frameGeometry.y():窗口輪廓整個框架左上角的座標y 55 frameGeometry.width():窗口全框架寬度 56 frameGeometry.height():窗口全框架高度 57 58 ''' 59 cp = QDesktopWidget().availableGeometry().center() 60 #QDesktopWidget()獲取桌面框架,'.availableGeometry()'得到相對於顯示器的絕對值,'.center()'獲取屏幕中心點。 61 qr.moveCenter(cp)#把qr輪廓框架的中心點移動到cp點(桌面屏幕中心點) 62 self.move(qr.topLeft())#把self窗口(左上角)移動到qr的topLeft左上角,實現重合。'.move()'方法默認以左上角爲基點移動。 63 #self.move(qr.x(),qr.y())這一句和上一句相同效果,'x(),y()'指左上角的座標。 64 65 66 '''按鍵方法''' 67 def msg(self): 68 reply = QMessageBox.information(self,'Linux',"An operating system. ", QMessageBox.Ok | QMessageBox.Cancel, QMessageBox.Ok) 69 70 def about(self):#QMessageBox.about消息框只有一個按鍵'OK','.about'所需參數是(QWidget, str, str),圖標是自己這個btn按鍵的圖標。 71 reply = QMessageBox.about(self,'About Linux',"Something about Linux. ") 72 73 def closeEvent(self, event): #當咱們關閉一個QWidget,QCloseEvent類事件將會生成。若是要實現關閉前的動做,咱們須要修改closeEvent()方法。 74 reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)#最後一個參數QMessageBox.No指跳出qusetion框後默認選擇No 75 #QMessageBox::Information、Warning、Critical、Question四種消息框自帶圖標。若想它們中自定義Icon,只能重寫QMessageBox方法,見文末。 76 if reply == QMessageBox.Yes: 77 event.accept() #這裏是值,點下右上角的X以後,"關閉Widget"就成了方法參數中的event。 78 else: #在這裏進行一次question的選擇,並把選擇結果賦值給reply。若是reply爲Yes則event.accept()運行,反之就ignore這個event。 79 event.ignore() 80 81 82 if __name__ == '__main__': 83 app = QApplication(sys.argv)#全部的PyQt5應用必須建立一個應用(Application)對象。sys.argv參數是一個來自命令行的參數列表。 84 85 ex = Example()#須要ex來實例化,使用上面的函數 86 sys.exit(app.exec_()) 87 ''' 88 app.exec_()使得程序能夠一直循環運行,直到主窗口被關閉或被終止進程(若是沒有這句話,程序運行時會一閃而過) 89 主循環將在下面兩種狀況下退出:(1)調用exit()方法,(2)主widget組件被銷燬。 90 sys.exit()能夠作到退出時系統不留垃圾,且系統環境將會被通知應用是怎樣被結束的。 91 exec_()方法有一個下劃線,是由於exec是Python保留的關鍵字,因此用exec_()來代替。 92 ''' 93 94 95 96 #未完成 97 '''@@@嘗試寫一個繼承了QMessageBox的方法,使它能自定義圖標 98 class QMessageBox_question(QMessageBox): 99 def __init__(self): 100 super().__init__() 101 self.AddIcon() 102 def AddIcon(): 103 104 當QMessageBox中的元素不可以知足需求時,能夠有兩種方法。 105 1)聲明一個類,從QMessageBox繼承而來。而後在其中添加繪製等操做。詳見網上另外一篇博客:https://www.xuebuyuan.com/896335.html 106 2)自定義一個類,其中包含對QMessageBox的更豐富操做:https://blog.csdn.net/liang19890820/article/details/50586031 107 '''
源代碼from:http://zetcode.com/gui/pyqt5/html
中文翻譯:https://www.cnblogs.com/archisama/p/5444032.htmllinux