一、顯示提示文本
給兩個(gè)PyQt5組件, QWidget 和 pushbutton 顯示提示框
import sys
from PyQt5.QtWidgets import QWidget, QToolTip, QPushButton, QApplication
from PyQt5.QtGui import QFont
# QToolTip 提示類
# QPushButton 按鈕類
# QFont 字體類
class Example(QWidget):
def __init__(self):
super().__init__()
self.my_UI()
def my_UI(self):
QToolTip.setFont(QFont('SansSerif', 10)) #QToolTip類里的這個(gè)靜態(tài)方法設(shè)置了用于提示框的字體疟赊。這里使用10px大小的SansSerif字體孤荣。
self.setToolTip('這是一個(gè) <b>QWidget</b> widget') #調(diào)用setTooltip()方法創(chuàng)建提示框甸陌,提示框中可以使用富文本格式
button = QPushButton('Button', self) #創(chuàng)建了一個(gè)按鈕
button.setToolTip('這是一個(gè) <b>QPushButton</b> widget') #同樣也給按鈕設(shè)置提示框
button.resize(button.sizeHint()) #改變按鈕大小须揣,setHint()方法給了按鈕一個(gè)推薦的大小
button.move(100, 80) #移動(dòng)按鈕的位置
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('提示文本')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
二、關(guān)閉窗口
創(chuàng)建一個(gè) pushbutton邀层,點(diǎn)擊就關(guān)閉窗口返敬。
先來(lái)看下QPushButton這個(gè)類
QPushButton(string text, QWidget parent = None)
text參數(shù)是將顯示在按鈕中的內(nèi)容。parent參數(shù)是一個(gè)用來(lái)放置我們按鈕的組件寥院。在我們的例子中將會(huì)是QWidget組件劲赠。一個(gè)應(yīng)用的組件是分層結(jié)構(gòu)的。在這個(gè)分層內(nèi)秸谢,大多數(shù)組件都有父類凛澎。沒(méi)有父類的組件是頂級(jí)窗口。
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication
#需要QtCore的對(duì)象模塊
class Example(QWidget):
def __init__(self):
super().__init__()
self.my_UI()
def my_UI(self):
button = QPushButton('退出', self) #創(chuàng)建了一個(gè)按鈕估蹄。按鈕是一個(gè)QPushButton類的實(shí)例
#PushButton構(gòu)造方法的第一個(gè)參數(shù)是顯示在button上的標(biāo)簽文本塑煎。第二個(gè)參數(shù)是父組件。父組件是Example組件臭蚁,它繼承了QWiget類
button.clicked.connect(QCoreApplication.instance().quit)
button.resize(button.sizeHint())
button.move(150, 100)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('退出按鈕')
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
在這個(gè)例子中最铁,我們創(chuàng)建一個(gè)退出按鈕,一旦按下按鈕垮兑,應(yīng)用將會(huì)結(jié)束(程序退出主循環(huán)冷尉,但窗口沒(méi)有關(guān)閉)
button.clicked.connect(QCoreApplication.instance().quit)
在PyQt5中,事件處理系統(tǒng)由信號(hào)&槽機(jī)制建立系枪。如果我們點(diǎn)擊了按鈕雀哨,信號(hào)clicked被發(fā)送。槽可以是Qt內(nèi)置的槽或Python 的一個(gè)方法調(diào)用私爷。
QCoreApplication類包含了主事件循環(huán)雾棺;它處理和轉(zhuǎn)發(fā)所有事件。instance()方法給我們返回一個(gè)實(shí)例化對(duì)象衬浑。注意QCoreAppli類由QApplication創(chuàng)建硅确。點(diǎn)擊信號(hào)連接到quit()方法役纹,將結(jié)束應(yīng)用侧纯。事件通信在兩個(gè)對(duì)象之間進(jìn)行:發(fā)送者和接受者迈套。發(fā)送者是按鈕,接受者是應(yīng)用對(duì)象拓诸。
三侵佃、Message Box
當(dāng)我們點(diǎn)擊窗口標(biāo)題欄上的 X 按鈕要退出時(shí),我們經(jīng)常會(huì)彈出消息框來(lái)確認(rèn)這個(gè)動(dòng)作
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QMessageBox
class Example(QWidget):
def __init__(self):
super().__init__()
self.my_UI()
def my_UI(self):
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('消息框')
self.show()
def closeEvent(self, event): #如果我們關(guān)閉一個(gè)QWidget奠支,QCloseEvent類事件將被生成馋辈。
#要修改組件動(dòng)作我們需要重新實(shí)現(xiàn)closeEvent()事件處理方法。
reply = QMessageBox.question(self, 'Message',
"你確定要退出么?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
當(dāng)關(guān)閉操作被觸發(fā)時(shí)倍谜,我們實(shí)現(xiàn)一個(gè)帶兩個(gè)按鈕的message box:YES和No按鈕迈螟。代碼中第一個(gè)字符串的內(nèi)容被顯示在標(biāo)題欄上叉抡。第二個(gè)字符串是對(duì)話框上顯示的文本。第三個(gè)參數(shù)指定了顯示在對(duì)話框上的按鈕集合答毫。最后一個(gè)參數(shù)是默認(rèn)選中的按鈕褥民。這個(gè)按鈕一開始就獲得焦點(diǎn)。返回值被儲(chǔ)存在reply變量中洗搂。
在這里我們測(cè)試一下返回值消返。代碼邏輯是如果我們點(diǎn)擊Yes按鈕,我們接收到的事件關(guān)閉事件耘拇,這將導(dǎo)致了組件的關(guān)閉和應(yīng)用的結(jié)束撵颊。否則不是點(diǎn)擊Yes按鈕的話我們將忽略將關(guān)閉事件。
四惫叛、窗口于屏幕居中
import sys
from PyQt5.QtWidgets import QWidget,QApplication, QDesktopWidget
#QQDesktopWidget類提供了我們桌面窗口的信息倡勇,包含了屏幕尺寸。
class Example(QWidget):
def __init__(self):
super().__init__()
self.my_UI()
def my_UI(self):
self.resize(300, 300)
self.center() #將窗口居中放置的代碼在自定義的center()方法中嘉涌。
self.setWindowTitle('Center')
self.show()
def center(self):
qr = self.frameGeometry() #獲得主窗口的一個(gè)矩形特定幾何圖形妻熊。這包含了窗口的框架
cp = QDesktopWidget().availableGeometry().center()
#算出相對(duì)于顯示器的絕對(duì)值。并且從這個(gè)絕對(duì)值中仑最,我們獲得了屏幕中心點(diǎn)
qr.moveCenter(cp) #把矩形的中心設(shè)置到屏幕的中間去固耘。矩形的大小并不會(huì)改變。
self.move(qr.topLeft()) #再次移動(dòng)應(yīng)用窗口的左上方的點(diǎn)到qr矩形的左上方的點(diǎn)词身,因此居中顯示在我們的屏幕上。
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())