對(duì)話類控件
1、QDialog
為了更好地實(shí)現(xiàn)人機(jī)交互,比如 Windows 及 Linux等系統(tǒng)均會(huì)提供一系列的標(biāo)準(zhǔn)對(duì)話框來(lái)完成特定場(chǎng)景下的功能,如選擇字號(hào)大小、字體顏色等。在PyQt 5中定義了一系列的標(biāo)準(zhǔn)對(duì)話框類,讓使用者能夠方便和快捷地通過(guò)各個(gè)類完成字號(hào)大小、字體顏色以及文件的選擇等。
QDialog類的子類主要有QMessageBox.QFileDialog,QFontDialog,QInputDialog等,這些內(nèi)容在本節(jié)都會(huì)介紹到。
QDialog類中的常用方法如表1所示。

實(shí)例演示1:QDialog的使用
運(yùn)行代碼,點(diǎn)擊彈出對(duì)話框,顯示效果如下:

代碼分析:
在這個(gè)例子中,Dialog 窗口的 WindowModality屬性決定是否為模態(tài)或非模態(tài)。當(dāng)用戶按下Esc鍵時(shí),對(duì)話框窗口將會(huì)默認(rèn)調(diào)用 QDialog.reject()方法,然后關(guān)閉對(duì)話框窗口。
單擊QWidget窗口中的PushButton按鈕時(shí),將生成一個(gè)對(duì)話框窗口。在對(duì)話框窗口的標(biāo)題欄上沒有最小化和最大化控件。以下代碼將給按鈕的clicked信號(hào)添加槽函數(shù)showdialog()
由于 Dialog窗口的 WindowModality屬性設(shè)置為Qt.ApplicationModal模態(tài),用戶只有關(guān)閉所彈出的對(duì)話框窗口后,才能關(guān)閉主窗口。以下代碼用于設(shè)置對(duì)話框模態(tài):
2、QMessageBox
QMessageBox是一種通用的彈出式對(duì)話框,用于顯示消息,允許用戶通過(guò)單擊不同的標(biāo)準(zhǔn)按鈕對(duì)消息進(jìn)行反饋。每個(gè)標(biāo)準(zhǔn)按鈕都有一個(gè)預(yù)定義的文本、角色和十六進(jìn)制數(shù)。
QMessageBox類提供了許多常用的彈出式對(duì)話框,如提示、警告、錯(cuò)誤、詢問(wèn)、關(guān)于等對(duì)話框。這些不同類型的QMessageBox對(duì)話框只是顯示時(shí)的圖標(biāo)不同,其他功能是一樣的。
OMessageBox類中的常用方法如表2所示。

QMessageBox的標(biāo)準(zhǔn)按鈕類型如表3所示。

實(shí)例演示2:QMessageBox的使用
運(yùn)行程序,顯示效果如圖所示:

3、QInputDialog
QInputDialog控件是一個(gè)標(biāo)準(zhǔn)對(duì)話框,由一個(gè)文本框和兩個(gè)按鈕(OK按鈕和Cancel按鈕)組成。當(dāng)用戶單擊OK按鈕或按 Enter鍵后,在父窗口可以收集通過(guò)QInputDialog 控件輸入的信息。QInputDialog 控件是QDialog標(biāo)準(zhǔn)對(duì)話框的一部分。
在 QInputDialog 控件中可以輸入數(shù)字、字符串或列表中的選項(xiàng)。標(biāo)簽用于提示必要的信息。
QlnputDialog類中的常用方法如表4所示。

實(shí)例演示3:QInputDialog的使用
運(yùn)行代碼,點(diǎn)擊按鍵1~3,分別選擇或者輸入對(duì)應(yīng)的數(shù)據(jù),顯示效果如下:

代碼分析:
在這個(gè)例子中,在QFormLayout布局管理器中放置了三個(gè)按鈕和三個(gè)文本框。當(dāng)單擊按鈕時(shí),將彈出標(biāo)準(zhǔn)對(duì)話框,把按鈕的單擊信號(hào)與自定義的槽函數(shù)連接起來(lái)。
當(dāng)調(diào)用QInputDialog.getItem()函數(shù)時(shí),QInputDialog控件包含一個(gè) QCombox控件和兩個(gè)按鈕,用戶從 QCombox中選擇一個(gè)選項(xiàng)后,允許用戶確認(rèn)或取消操作。
同理,當(dāng)調(diào)用QInputDialog.getText()函數(shù)時(shí),QInputDialog 控件包含一個(gè)文本框和兩個(gè)按鈕,允許用戶輸入字符串;當(dāng)調(diào)用QInputDialog.getInt()函數(shù)時(shí),QInputDialog包含一個(gè)OSpinBox控件和兩個(gè)按鈕,允許用戶輸入整數(shù)。
4、QFontDialog
QFontDialog 控件是一個(gè)常用的字體選擇對(duì)話框,可以讓用戶選擇所顯示文本的字號(hào)大小、樣式和格式。QFontDialog是 QDialog標(biāo)準(zhǔn)對(duì)話框的一部分。使用OFontDialog類的靜態(tài)方法getFont(),可以從字體選擇對(duì)話框中選擇文本的顯示字號(hào)大小、樣式和格式。
實(shí)例演示4:QFontDialog的使用
運(yùn)行程序,顯示的效果如圖:

代碼分析:
在這個(gè)例子中,通過(guò)字體選擇對(duì)話框選擇相應(yīng)的字體,并且所選擇字體的效果顯示在 QLineEdit的文本上。
實(shí)例化 fontButton和 fontLineEdit對(duì)象,并將fontButton的clicked 信號(hào)和槽函數(shù)getFont(綁定在一起。
創(chuàng)建QVBoxLayout布局,在垂直布局管理器中添加fontButton和 fontLineEdit組件,并按照相應(yīng)的位置添加到柵格布局中。
當(dāng)單擊fontButton按鈕時(shí),將clicked信號(hào)發(fā)送到槽函數(shù)getFont()中。
自定義槽函數(shù),選擇字體,并將字體效果設(shè)置到fontLineEdit中。getFont()方法返回的為元組類型,同時(shí)返回所選擇的字體和函數(shù)執(zhí)行的狀態(tài)。
5、QFileDialog
QFileDialog是用于打開和保存文件的標(biāo)準(zhǔn)對(duì)話框。QFileDialog 類繼承自QDialog類。
QFileDialog在打開文件時(shí)使用了文件過(guò)濾器,用于顯示指定擴(kuò)展名的文件。也可以設(shè)置使用QFileDialog打開文件時(shí)的起始目錄和指定擴(kuò)展名的文件。
OFileDialog類中的常用方法如表5所示。

實(shí)例演示5:QFileDialog的使用
運(yùn)行程序,顯示效果如下:

點(diǎn)擊加載圖片,如下:

點(diǎn)擊加載文件:

代碼分析:
在這個(gè)例子中,通過(guò)文件對(duì)話框來(lái)選擇文件,其中第一個(gè)文件對(duì)話框只允許打開圖片文件,并把所加載的圖片顯示在標(biāo)簽(QLabel)中;第二個(gè)文件對(duì)話框只允許打開文本文件,并把文本內(nèi)容顯示在文本框(QTextEdit)內(nèi)。
第一個(gè)按鈕使用QFileDialog.getOpenFileNam(),調(diào)用文件對(duì)話框來(lái)顯示圖像,并顯示在一個(gè)標(biāo)簽控件中。它負(fù)責(zé)打開項(xiàng)目根目錄下的文件。其核心代碼如下:
在QFileDialog.getOpenFileNam()函數(shù)中:
第一個(gè)參數(shù)用于指定父組件;
第二個(gè)參數(shù)是OFileDialog對(duì)話框的標(biāo)題;
第三個(gè)參數(shù)是對(duì)話框顯示時(shí)默認(rèn)打開的目錄,“.”代表程序運(yùn)行目錄,“/”代表當(dāng)前盤下的根目錄(在 Windows、Linux 下“/”就表示根目錄)。需要注意不同平臺(tái)下路徑的顯示方式,比如 Windows平臺(tái)下的C盤“C:)”等。
第四個(gè)參數(shù)是對(duì)話框中文件擴(kuò)展名過(guò)濾器(Filter)。比如使用“Image files(".jpg *.png)”表示只能顯示擴(kuò)展名為.jpg 或.png的文件。
第二個(gè)按鈕使用文件對(duì)話框(QFileDialog)對(duì)象的exec_()方法來(lái)選擇文件,并把所選文件的內(nèi)容顯示在文本編輯控件中。其核心代碼如下: