天天看點

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

文章目錄

  • 【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解
    • 1、什麼是頂層視窗?
    • 2、主視窗與頂層視窗的差別
    • 3、什麼是父控件?
    • 4、通過一個簡單例子了解頂層視窗和頂層控件
            • 1. 首先,在應用程式中建立一個空白視窗(使用QWidget控件建立);
            • 2. 再建立一個“按鈕QPushButton”控件,同樣沒有父控件,它會以一個獨立視窗顯示。
            • 3. 再建立一個“标簽QLabel”控件,并設定控件屬性和顯示;
      • 5、建立一個父控件和子控件(子控件顯示在父視窗中)

【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

1、什麼是頂層視窗?

頂層視窗——就是目前響應的視窗,非頂層視窗就是灰色的,不響應的視窗。

2、主視窗與頂層視窗的差別

主視窗永遠隻有1個;

非主視窗可有多個;

頂層視窗也隻有1個;但他們是不是頂層視窗得看目前執行的視窗是否在最上面(所有視窗的上面)。

就是主視窗的建立代表應用程式的開始;主視窗的關閉代表應用程式的結束。而頂層視窗隻是顯示在最上面,覆寫其他視窗,但卻沒有其他視窗能夠擋住它!

首先,一個應用程式可以有許多視窗,但主視窗隻有一個!而頂層視窗其實也隻有一個,但卻可以是不同名字的視窗。 舉個例子:

我建立了3個視窗:視窗1、2和3。其中,視窗1是主視窗。是這個應用程式的根本。當我運作該程式時,視窗1立即出現,此時,它就是頂層視窗;

在運作程式期間,我利用某些方法(例如點選滑鼠或按鍵盤)可以打開第二個視窗,此時,主視窗仍然是視窗1,而頂層視窗卻改為視窗2了。

我又打開了一個視窗,此時,主視窗仍然是視窗1,而頂層視窗又變成視窗3了,視窗2什麼也不是。

當我關閉視窗3時,視窗2成為頂層視窗(當然我們可以用一定的方法不這麼做),視窗1還是主視窗。

當我關閉視窗2時,視窗1成為頂層視窗,同時也是主視窗。

但是,如果我沒有關閉視窗2和3,而是立即關閉視窗1(如果可以的話,但一般我們都阻止使用者這麼做,必須讓他們先關掉其他視窗再關主視窗!),那麼程式就會停止。另外兩個視窗也會随即關閉。一般應用程式都是這麼設計的。

簡言之,就是主視窗的建立代表應用程式的開始;主視窗的關閉代表應用程式的結束。而頂層視窗隻是顯示在最上面,覆寫其他視窗,但卻沒有其他視窗能夠擋住它!

3、什麼是父控件?

簡單來說,控件停靠的容器稱之為父控件,那麼所有停靠在父控件内的控件稱之為子控件;

4、通過一個簡單例子了解頂層視窗和頂層控件

# -*- coding: utf-8 -*-
"""--一個最基本的Python GUI程式架構---"""
# 導入需要的包
from PyQt5.Qt import *
import sys
# 1、建立一個應用程式
app = QApplication(sys.argv)  #建立一個應用程式(比不可少的)
#2、控件操作

#2.1 建立控件

# 2.2 設定控件

# 2.3 展示控件

#3、開始執行應用程式,并進入消息循環
sys.exit(app.exec_())

           

【解釋】

  • 控件操作主要包括:建立控件,設定控件(大小、位置、樣式…),事件,信号的處理
  • 視窗控件——是一個容器,可以用于承載其他的控件,并且它具有一些特性(設定标題、圖示)
  • 若建立的是一個獨立的(最純潔的頂層控件)的控件,則展示的是一個獨立的視窗

接下來,我們在應用程式app中進行控件操作。

1. 首先,在應用程式中建立一個空白視窗(使用QWidget控件建立);

window = QWidget()    #Qt::Widget是獨立視窗和子視窗兩用的,Qt::Window會有标題欄)
           

完整代碼如下:

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

上面代碼執行之後,沒有任何視窗顯示出來,為什麼呢?

因為——剛建立好的一個控制(QWidget)之後,(這個控件沒有什麼父控件),預設情況下是不會被展示,隻有手動的調用show()函數才能顯示。即

window.show()   #
           

将此函數加在“2.3 展示控件”區域。執行結果如下圖所示

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

當我們建立一個控件之後,如果這個控件沒有父控件,則把它當做頂層控件(也叫頂層視窗),展示時就是一個獨立的視窗,系統會自動給視窗添加一些裝飾(标題欄、最小化、最大化、關閉按鈕)

(1)修改Widget視窗的标題

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

設定視窗的大小:window.resize(width,heigh)

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

2. 再建立一個“按鈕QPushButton”控件,同樣沒有父控件,它會以一個獨立視窗顯示。

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

為什麼沒有顯示?

——是因為push = QPushButton()是一個沒有父控件的控件,是以顯示時會以獨立視窗顯示。這樣的話,需要我們手動添加一個顯示函數:show(),才能顯示。

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

3. 再建立一個“标簽QLabel”控件,并設定控件屬性和顯示;

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

5、建立一個父控件和子控件(子控件顯示在父視窗中)

PyQt5學習筆記04——頂層視窗(也叫父控件/獨立控件)的建立及了解【标題】頂層視窗(也叫父控件/獨立控件)的建立及了解

建立一個父控件QWidget,并建立一個子控件(QLabel),而此子控件繼承父控件QWidget,則子控件不能獨立顯示,而是顯示在父控件中,且顯示函數隻需要一個,即對QWidget控件的顯示函數。

繼續閱讀