pyqt5教程(三)簡(jiǎn)單的界面

一、顯示提示文本

給兩個(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_())

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末番枚,一起剝皮案震驚了整個(gè)濱河市法严,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葫笼,老刑警劉巖深啤,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異路星,居然都是意外死亡溯街,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門洋丐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呈昔,“玉大人,你說(shuō)我怎么就攤上這事友绝〉涛玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵迁客,是天一觀的道長(zhǎng)郭宝。 經(jīng)常有香客問(wèn)我辞槐,道長(zhǎng),這世上最難降的妖魔是什么粘室? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任榄檬,我火速辦了婚禮,結(jié)果婚禮上衔统,老公的妹妹穿的比我還像新娘鹿榜。我一直安慰自己,他們只是感情好缰冤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布犬缨。 她就那樣靜靜地躺著,像睡著了一般棉浸。 火紅的嫁衣襯著肌膚如雪怀薛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天迷郑,我揣著相機(jī)與錄音枝恋,去河邊找鬼。 笑死嗡害,一個(gè)胖子當(dāng)著我的面吹牛焚碌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霸妹,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼十电,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了叹螟?” 一聲冷哼從身側(cè)響起鹃骂,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罢绽,沒(méi)想到半個(gè)月后畏线,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡良价,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年寝殴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片明垢。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚣常,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痊银,到底是詐尸還是另有隱情史隆,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布曼验,位于F島的核電站泌射,受9級(jí)特大地震影響粘姜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熔酷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一孤紧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拒秘,春花似錦号显、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至羹应,卻和暖如春揽碘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背园匹。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工雳刺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裸违。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓掖桦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親供汛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枪汪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評(píng)論 25 707
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,365評(píng)論 0 17
  • 春花依舊怔昨,秋月弦纖雀久。物是人非,攬幾度相思朱监,伊人陌路。 怎可負(fù)原叮,昔影闌珊赫编,朝朝暮暮。終是奋隶,長(zhǎng)恨夜未央擂送,別離苦。
    曌旭閱讀 377評(píng)論 0 1
  • 我有一位超人媽媽唯欣,她把我養(yǎng)育成人嘹吨,本應(yīng)是休息到處游山玩水的年紀(jì),卻又還要照顧我的寶寶境氢。媽媽真的好辛苦好心疼她蟀拷。
    慢半拍的小蝸牛閱讀 178評(píng)論 0 0
  • 柳絮 文/紅塵一凡 騎著五月的陽(yáng)光 帶著雪的面具 飄飄灑灑 像愛 潔白無(wú)瑕 又騷癢難耐 像情 死纏爛打 又執(zhí)著難拗...
    37度女人_8dda閱讀 197評(píng)論 0 1