PyQt5(1)——QToolTip, QPushButton, QMessageBox, QDesktopWidget

  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

  • 不知爲什麼代碼只能在命令行窗口裏運行。我使用的Windows PowerShell。
  • 效果以下↓

相關文章
相關標籤/搜索