《PyQT5軟件開發(fā) - 基礎(chǔ)篇》第2章 PyQt5基本功能

PyQt5是一種高級的語言,下面只有幾行代碼就能顯示一個小窗口继蜡。底層已經(jīng)實現(xiàn)了窗口的基本功能回俐。

2.1入門實例

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
import sys
 
#這里我們提供必要的引用∠〔ⅲ基本控件位于pyqt5.qtwidgets模塊中仅颇。
from PyQt5.QtWidgets import QApplication, QWidget
 
 
if __name__ == '__main__':
    #每一pyqt5應(yīng)用程序必須創(chuàng)建一個應(yīng)用程序?qū)ο蟆ys.argv參數(shù)是一個列表碘举,從命令行輸入?yún)?shù)忘瓦。
    app = QApplication(sys.argv)
    #QWidget部件是pyqt5所有用戶界面對象的基類。他為QWidget提供默認(rèn)構(gòu)造函數(shù)殴俱。默認(rèn)構(gòu)造函數(shù)沒有父類。
    w = QWidget()
    #resize()方法調(diào)整窗口的大小枚抵。這離是250px寬150px高
    w.resize(250, 150)
    #move()方法移動窗口在屏幕上的位置到x = 300线欲,y = 300坐標(biāo)。
    w.move(300, 300)
    #設(shè)置窗口的標(biāo)題
    w.setWindowTitle('Simple')
    #顯示在屏幕上
    w.show()
    
    #系統(tǒng)exit()方法確保應(yīng)用程序干凈的退出
    #的exec_()方法有下劃線汽摹。因為執(zhí)行是一個Python關(guān)鍵詞李丰。因此,exec_()代替
    sys.exit(app.exec_())

運(yùn)行結(jié)果如下:

2.2應(yīng)用程序圖標(biāo)

應(yīng)用程序圖標(biāo)是一個小的圖像逼泣,通常在標(biāo)題欄的左上角顯示趴泌。在下面的例子中我們將介紹如何做pyqt5的圖標(biāo)舟舒。同時我們也將介紹一些新方法。

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
 
 
class Icon(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI() #界面繪制交給InitUi方法
        
        
    def initUI(self):
        #設(shè)置窗口的位置和大小
        self.setGeometry(300, 300, 300, 220)  
        #設(shè)置窗口的標(biāo)題
        self.setWindowTitle('Icon')
        #設(shè)置窗口的圖標(biāo)嗜憔,引用當(dāng)前目錄下的web.png圖片
        self.setWindowIcon(QIcon('mail.ico'))        
        
        #顯示窗口
        self.show()
        
        
if __name__ == '__main__':
    #創(chuàng)建應(yīng)用程序和對象
    app = QApplication(sys.argv)
    ex = Icon()
    sys.exit(app.exec_())

前面的例子是在程序風(fēng)格秃励。Python編程語言支持程序和面向?qū)ο缶幊田L(fēng)格。Pyqt5使用OOP編程吉捶。

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        ...

面向?qū)ο缶幊逃腥齻€重要的方面:類夺鲜、變量和方法。這里我們創(chuàng)建一個新的類為Examle呐舔。Example繼承自QWidget類币励。

2.3顯示提示語

在下面的例子中我們顯示一個提示語。

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication)
from PyQt5.QtGui import QFont    
 
class ToolTip(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):
        #這種靜態(tài)的方法設(shè)置一個用于顯示工具提示的字體珊拼。我們使用10px滑體字體食呻。
        QToolTip.setFont(QFont('SansSerif', 10))
        
        #創(chuàng)建一個提示,我們稱之為settooltip()方法澎现。我們可以使用豐富的文本格式
        self.setToolTip('This is a <b>QWidget</b> widget')
        
        #創(chuàng)建一個PushButton并為他設(shè)置一個tooltip
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        
        #btn.sizeHint()顯示默認(rèn)尺寸
        btn.resize(btn.sizeHint())
        
        #移動窗口的位置
        btn.move(50, 50)       
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')    
        self.show()
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = ToolTip()
    sys.exit(app.exec_())

運(yùn)行程序仅胞,顯示一個窗口,將光標(biāo)放在按鈕上會有提示信息昔头。

2.4關(guān)閉窗口

關(guān)閉一個窗口可以點(diǎn)擊標(biāo)題欄上的X饼问。在下面的例子中,我們將展示我們?nèi)绾瓮ㄟ^編程來關(guān)閉窗口揭斧。

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication
 
 
class Quit(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):               
        
        qbtn = QPushButton('Quit', self)
        qbtn.clicked.connect(QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       
        
        self.setGeometry(300, 300, 250, 150)

        self.setWindowTitle('Quit button')    
        self.show()
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Quit()
    sys.exit(app.exec_())

運(yùn)行程序莱革,點(diǎn)擊Quit按鈕,程序退出讹开。

2.5消息框

默認(rèn)情況下,如果我們單擊x按鈕窗口就關(guān)門了盅视。有時我們想修改這個默認(rèn)的行為。例如我們在編輯器中修改了一個文件,當(dāng)關(guān)閉他的時候旦万,我們顯示一個消息框確認(rèn)闹击。

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication
 
class Messagebox(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):               
        
        self.setGeometry(300, 300, 250, 150)        
        self.setWindowTitle('Message box')    
        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()        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Messagebox()
    sys.exit(app.exec_())

我們關(guān)閉窗口的時候,觸發(fā)了QCloseEvent成艘。我們需要重寫closeEvent()事件處理程序赏半。

reply = QMessageBox.question(self, 'Message',
    "Are you sure to quit?", QMessageBox.Yes | 
    QMessageBox.No, QMessageBox.No)

我們顯示一個消息框,兩個按鈕:“是”和“不是”。第一個字符串出現(xiàn)在titlebar淆两。第二個字符串消息對話框中顯示的文本断箫。第三個參數(shù)指定按鈕的組合出現(xiàn)在對話框中。最后一個參數(shù)是默認(rèn)按鈕秋冰,這個是默認(rèn)的按鈕焦點(diǎn)仲义。

if reply == QtGui.QMessageBox.Yes:
    event.accept()
else:
    event.ignore()  

我們處理返回值,如果單擊Yes按鈕,關(guān)閉小部件并終止應(yīng)用程序埃撵。否則我們忽略關(guān)閉事件赵颅。

2.6窗口顯示在屏幕的中間

下面的腳本顯示了如何在屏幕中心顯示窗口。

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication
 
 
class Center(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):               
        
        self.resize(250, 150)
        self.center()
        
        self.setWindowTitle('Center')    
        self.show()
        
    
    #控制窗口顯示在屏幕中心的方法    
    def center(self):
        
        #獲得窗口
        qr = self.frameGeometry()
        #獲得屏幕中心點(diǎn)
        cp = QDesktopWidget().availableGeometry().center()
        #顯示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Center()
    sys.exit(app.exec_())  

QtGui,QDesktopWidget類提供了用戶的桌面信息,包括屏幕大小暂刘。

資源獲取方法

1.關(guān)注公眾號[AI實驗樓]

2.在公眾號回復(fù)關(guān)鍵詞[PyQt5]獲取資料提取碼

歡迎訪問我的網(wǎng)站

BruceOu的嗶哩嗶哩
BruceOu的主頁
BruceOu的博客
BruceOu的CSDN博客
BruceOu的簡書
BruceOu的知乎

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饺谬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸳惯,更是在濱河造成了極大的恐慌商蕴,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芝发,死亡現(xiàn)場離奇詭異绪商,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辅鲸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門格郁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人独悴,你說我怎么就攤上這事例书。” “怎么了刻炒?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵决采,是天一觀的道長。 經(jīng)常有香客問我坟奥,道長树瞭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任爱谁,我火速辦了婚禮晒喷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘访敌。我一直安慰自己凉敲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布寺旺。 她就那樣靜靜地躺著爷抓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阻塑。 梳的紋絲不亂的頭發(fā)上蓝撇,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音叮姑,去河邊找鬼唉地。 笑死,一個胖子當(dāng)著我的面吹牛传透,可吹牛的內(nèi)容都是我干的耘沼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼朱盐,長吁一口氣:“原來是場噩夢啊……” “哼群嗤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兵琳,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤狂秘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后躯肌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體者春,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年清女,在試婚紗的時候發(fā)現(xiàn)自己被綠了钱烟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡嫡丙,死狀恐怖拴袭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曙博,我是刑警寧澤拥刻,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站父泳,受9級特大地震影響般哼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尘吗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一逝她、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睬捶,春花似錦黔宛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至介劫,卻和暖如春徽惋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背座韵。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工险绘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踢京,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓宦棺,卻偏偏與公主長得像瓣距,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子代咸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容