PyQt5入門(一)——基礎
阿新 • • 發佈:2018-12-16
此總結主要參考下面這篇文章:PyQt5基本功能
文中出現的self均預設繼承了QWidget的類,改為繼承QMainWindow類也是可以的
1. 一個簡單的框架:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
#匯入必要的相關庫
if __name__ == '__main__':
w = QWidget()
w.show()
app = QApplication(sys.argv)
sys.exit(app.exec_())
除了上面這種,還可以用OOP程式設計
import sys
from PyQt5.QtWidgets import QApplication, QWidget
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
2. 視窗大小、位置和標題的設定
#這裡假設前面已經宣告繼承了QWidget的類
self.resize(width,length)
self.move(x,y) # 左上角為(0,0)點
self.setGeometry(x,y,width,length)
self.setWindowTitle('window_title')
resize & move 和 setGeometry的區別參見下圖:
resize和setGeometry的對應功能是一致的,move與對應的不同
3. 程式圖示、字型、提示語
from PyQt5.QtWidgets import QToolTip
from PyQt5.Gui import QFont, QIcon
#這裡只匯入與這部分內容直接相關的庫
#程式圖示
self.setWindowIcon(QIcon(image.path))#如果是在當前資料夾下,只需填入檔名即可
#字型/字號
QToolTip.setFont(QFont('SansSerif',10))
#提示語
self.setToolTip('sldfjlj')#這裡可以使用豐富的文字格式包括HTML
4. 按鈕
from PyQt5.QtWidgets import QPushButton
btn = QPushButton('Button_name',self)
btn.resize(btn.sizeHint()) #預設尺寸
btn.move(50,50)
btn.setToolTip('')
- 將button和程式退出聯絡起來
from PyQt5.QtCore import QCoreApplication
btn.clicked.connect(QCoreApplication.instance().quit)
5. 訊息框
from PyQt5.QtWidgets import QMessageBox
#這裡的closeEvent是一個已經存在的函式,由點選右上角的‘X’觸發,這裡是把這個函式進行修改
#所以在自己編寫的程式裡往往是看不到對這個函式的呼叫的,這個與下面一部分內容的示例是不同的
def closeEvent(self, event):
reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
#第一個引數是title,第二個引數是顯示的問題,第三個引數是指定按鈕的組合出現在對話方塊中,最後一個引數是預設按鈕,就是對話框出現後敲回車執行的按鈕
#目前來看後兩個引數是隻能這樣寫而不能寫成別的形式的,首字母甚至不能是小寫形式,感覺應該是可以改的
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
- 將button和訊息框聯絡起來
btn.clicked.connect(self.msg)
#顯示問題
def msg(self):
reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes|QMessageBox.No, QMessageBox.No)
#顯示資訊
def msg(self):
reply = QMessageBox.information(self,'資訊提示框',"ok, 彈出測試資訊")
6. 視窗居中
from PyQt5.QtWidgets import QDesktopWidget
self.center()
def center(self):
#獲得視窗
qr = self.frameGeometry()
#獲得螢幕中心點
cp = QDesktopWidget().availableGeometry().center()
#顯示到螢幕中心
qr.moveCenter(cp)
self.move(qr.topLeft())
綜合上述功能得到如下示例:
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton, QApplication, QMessageBox, QDesktopWidget)
from PyQt5.QtGui import QFont,QIcon
from PyQt5.QtCore import QCoreApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif',10))
self.setToolTip('這是一個 <b>QWidget</b> 部件')
btn = QPushButton('退出', self)
btn.setToolTip('這是一個 <b>QPushButton</b> 部件')
# default size
btn.resize(btn.sizeHint())
btn.move(50, 50)
btn.clicked.connect(QCoreApplication.instance().quit)
self.setGeometry(300,300,300,200)
self.center()
self.setWindowTitle('tooltips')
self.setWindowIcon(QIcon('web.jpg'))
self.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
def center(self):
qr = self.frameGeometry() # 獲得視窗
cp = QDesktopWidget().availableGeometry().center()# 獲得螢幕中心點
qr.moveCenter(cp)# 顯示到螢幕中心
self.move(qr.topLeft())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())