PyQt5系列教程(8):標準輸入對話框

上期我們介紹了PyQt5軟體界面的搭建,主要涉及到了以下幾個知識點:

  • 狀態欄
  • 菜單
  • 工具欄

今天我們主要講解一下標準輸入對話框的知識。

對話框窗口或對話框是大多數現代GUI應用程序中不可或缺的一部分。在計算機應用程序中,一個對話框是一個用於「與應用程序」通話的窗口。對話框用於輸入數據,修改數據,更改應用程序設置等。因為對話框涉及的內容比較多,我們計劃分成幾個章節來講解,今天主要介紹輸入對話框。

QInputDialog提供了一個簡單的便利對話框,可以從用戶獲取單個值。 輸入值可以是列表中的字元串,數字或項目。我們會分別通過一個例子來看看一下。效果如下:

首先看下QInputDialog包含的幾個方法:

  • getDouble(QWidget, str, str, value: float = 0, min: float = -2147483647, max: float = 2147483647, decimals: int = 1, flags: Union[Qt.WindowFlags,Qt.WindowType]=Qt.WindowFlags())->Tuple[float,bool]
  • getInt(QWidget, str, str, value: int = 0, min: int = -2147483647, max: int = 2147483647, step: int = 1, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags()) -> Tuple[int, bool]
  • getItem(QWidget, str, str, Iterable[str], current:int=0,editable:bool=True,flags:Union[Qt.WindowFlags,Qt.WindowType]=Qt.WindowFlags(),inputMethodHints:Union[Qt.InputMethodHints,Qt.InputMethodHint] = Qt.ImhNone) -> Tuple[str, bool]
  • getMultiLineText(QWidget, str, str, text: str = , flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags(), inputMethodHints: Union[Qt.InputMethodHints, Qt.InputMethodHint] = Qt.ImhNone)-> Tuple[str, bool]
  • getText(QWidget, str, str, echo: QLineEdit.EchoMode = QLineEdit.Normal,text: str = , flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags(),inputMethodHints: Union[Qt.InputMethodHints, Qt.InputMethodHint] = Qt.ImhNone) -> Tuple[str, bool]

接著來看看具體的實現例子:

#coding=utf-8nnfrom PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel, QInputDialog, QTextBrowser)nimport sysnclass Example(QWidget):nn def __init__(self):n super().__init__()n self.initUI()nn def initUI(self):n self.setGeometry(500,500,500,550)n self.setWindowTitle(關注微信公眾號:學點編程吧--標準輸入對話框)nn self.lb1 = QLabel(姓名:,self)n self.lb1.move(20,20)nn self.lb2 = QLabel(年齡:,self)n self.lb2.move(20,80)nn self.lb3 = QLabel(性別:,self)n self.lb3.move(20,140)nn self.lb4 = QLabel(身高(cm):,self)n self.lb4.move(20,200)nn self.lb5 = QLabel(基本信息:,self)n self.lb5.move(20,260)nn self.lb6 = QLabel(學點編程,self)n self.lb6.move(80,20)nn self.lb7 = QLabel(18,self)n self.lb7.move(80,80)nn self.lb8 = QLabel(,self)n self.lb8.move(80,140)nn self.lb9 = QLabel(175,self)n self.lb9.move(120,200)nn self.tb = QTextBrowser(self)n self.tb.move(20,320)nn self.bt1 = QPushButton(修改姓名,self)n self.bt1.move(200,20)nn self.bt2 = QPushButton(修改年齡,self)n self.bt2.move(200,80) nn self.bt3 = QPushButton(修改性別,self)n self.bt3.move(200,140) nn self.bt4 = QPushButton(修改身高,self)n self.bt4.move(200,200) nn self.bt5 = QPushButton(修改信息,self)n self.bt5.move(200,260)nn self.show()nn self.bt1.clicked.connect(self.showDialog)n self.bt2.clicked.connect(self.showDialog)n self.bt3.clicked.connect(self.showDialog)n self.bt4.clicked.connect(self.showDialog)n self.bt5.clicked.connect(self.showDialog)n n def showDialog(self):n sender = self.sender()n sex = [,]n if sender == self.bt1:n text, ok = QInputDialog.getText(self, 修改姓名, 請輸入姓名:)n if ok:n self.lb6.setText(text) n elif sender == self.bt2:n text, ok = QInputDialog.getInt(self, 修改年齡, 請輸入年齡:, min = 1) n if ok:n self.lb7.setText(str(text))n elif sender == self.bt3:n text, ok = QInputDialog.getItem(self, 修改性別, 請選擇性別:,sex) n if ok:n self.lb8.setText(text) n elif sender == self.bt4:n text, ok = QInputDialog.getDouble(self, 修改身高, 請輸入身高:, min = 1.0)n if ok:n self.lb9.setText(str(text))n elif sender == self.bt5:n text, ok = QInputDialog.getMultiLineText(self, 修改信息, 請輸入個人信息:)n if ok:n self.tb.setText(text)nnif __name__ == __main__:n app = QApplication(sys.argv)n ex = Example()n sys.exit(app.exec_())n

該示例具有按鈕和標籤和文本瀏覽器。 通過按鈕顯示輸入對話框以便獲取值。 輸入的文本將顯示在窗口的標籤和文本瀏覽器中。

self.bt1.clicked.connect(self.showDialog)nself.bt2.clicked.connect(self.showDialog)nself.bt3.clicked.connect(self.showDialog)nself.bt4.clicked.connect(self.showDialog)nself.bt5.clicked.connect(self.showDialog)n

單擊按鈕連接對應的槽函數。

if sender == self.bt1:n text, ok = QInputDialog.getText(self, 修改姓名, 請輸入姓名:)n

若我們按下按鈕1,此時顯示輸入對話框。 第一個字元串是一個對話標題,第二個是對話框中的一個消息。 對話框返回輸入的文本和布爾值。 如果我們點擊Ok按鈕,布爾值為true。

if ok:n self.lb6.setText(text)n

如果我們按下ok鍵,則標籤6的text值是從對話框接收的文本。效果如下:

其他的函數也是類似的。但是提供的功能不一樣。

text, ok = QInputDialog.getInt(self, 修改年齡, 請輸入年齡:, min = 1)n

可以輸入整數,最小值、最大值可以自己設定,步長也可以自己設定。效果如下:

text, ok = QInputDialog.getItem(self, 修改性別, 請選擇性別:,sex)n

可以輸入選擇項,待選放到列表中,這裡的列表就是sex。效果如下:

text, ok = QInputDialog.getDouble(self, 修改身高, 請輸入身高:, min = 1.0)n

可以輸入浮點型小數,最小值、最大值可以自己設定。效果如下:

text, ok = QInputDialog.getMultiLineText(self, 修改信息, 請輸入個人信息:)n

可以輸入富文本,在裡面增加一些格式信息。效果如下:

我們總結一下今天的內容:

  • 標準輸入框的五種使用

ok,今天就到這裡,我們下期再談談其他的對話框,對話框本身的內容就比較多,會多分幾期講解。

如果你想要本次教程中的相關源碼,請關注微信公眾號:學點編程吧,發送pyqt58,會自動得到相應的百度網盤下載鏈接。


推薦閱讀:

代碼這樣寫更優雅 (Python 版)
1000+收藏了!小白自學Python一本通

TAG:Python | Python教程 | PyQt |