您好,登錄后才能下訂單哦!
本文主要介紹PyQt界面實現中常用的消息彈出對話框、提供用戶輸入的輸入框、打開文件獲取文件/目錄路徑的文件對話框。學習這三種控件前,先想一下它們使用的主要場景:
1、消息彈出對話框。程序遇到問題需要退出需要彈出錯誤提示框 、程序執行可能造成的風險需要彈出警告窗口提示用戶是否進一步執行等等。
2、用戶輸入框。比如常見的讓用戶選擇執行的程序分支、yes/no等等。
3、文件對話框。獲取本地文件或者文件夾的完整路徑甚至是直接打開文件顯示文件內容。
本文主要針對這三種控件的主要場景進行介紹。
QMessageBox:彈出對話框控件
QMessageBox是一種通用的彈出式對話框,用于顯示消息,允許用戶通過單擊不同的標準按鈕對消息進行反饋。彈出式對話框有很多類型,如提示、警告、錯誤、詢問、關于等對話框。這些不同類型的QMessageBox對話框只是顯示時圖標不同,其他功能一樣。
QMessageBox類中常用方法
information(QWdiget parent,title,text,buttons,defaultButton):彈出消息對話框。
question(QWidget parent,title,text,buttons,defaultButton):彈出問答對話框
warning(QWidget parent,title,text,buttons,defaultButton):彈出警告對話框
critical(QWidget parent,title,text,buttons,defaultButton):彈出嚴重錯誤對話框
about(QWidget parent,title,text):彈出關于對話
參數解釋如下:
parent:指定的父窗口控件。
title:表示對話框標題。
text:表示對話框文本。
buttons:表示多個標準按鈕,默認為ok按鈕。
defaultButton表示默認選中的標準按鈕,默認選中第一個標準按鈕。
其他方法如下:
setTitle():設置標題
setText():設置正文消息
setIcon():設置彈出對話框的圖片
QMessageBox的標準按鈕類型
QMessage.Ok 同意操作、QMessage.Cancel 取消操作、QMessage.Yes 同意操作、QMessage.No 取消操作、QMessage.Abort 終止操作、QMessage.Retry 重試操作、QMessage.Ignore 忽略操作
5種常用的消息對話框及其顯示效果
(1)消息對話框,用來告訴用戶關于提示信息
QMessageBox.information(self, '信息提示對話框','前方右拐到達目的地',QMessageBox.Yes | QMessageBox.No)
(2)提問對話框,用來告訴用戶關于提問消息。
QMessageBox.question(self, "提問對話框", "你要繼續搞測試嗎?", QMessageBox.Yes | QMessageBox.No)
(3)警告對話框,用來告訴用戶關于不尋常的錯誤消息。
QMessageBox.warning(self, "警告對話框", "繼續執行會導致系統重啟,你確定要繼續?", QMessageBox.Yes | QMessageBox.No)
(4)嚴重錯誤對話框,用來告訴用戶關于嚴重的錯誤消息。
QMessageBox.critical(self, "嚴重錯誤對話框", "數組越界,程序異常退出", QMessageBox.Yes | QMessageBox.No)
(5)關于對話框
QMessageBox.about(self, "關于對話框", "你的Windows系統是DOS1.0")
上述程序完整代碼如下:
# -*- coding: utf-8 -*- import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(431, 166) self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(160, 50, 91, 41)) font = QtGui.QFont() font.setFamily("YaHei Consolas Hybrid") font.setPointSize(10) self.pushButton.setFont(font) self.pushButton.setObjectName("pushButton") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "對話框")) self.pushButton.setText(_translate("Form", "彈出對話框")) class MyMainForm(QMainWindow, Ui_Form): def __init__(self, parent=None): super(MyMainForm, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.showMsg) def showMsg(self): QMessageBox.information(self, '信息提示對話框','前方右拐到達目的地',QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes) QMessageBox.question(self, "提問對話框", "你要繼續搞測試嗎?", QMessageBox.Yes | QMessageBox.No) QMessageBox.warning(self, "警告對話框", "繼續執行會導致系統重啟,你確定要繼續?", QMessageBox.Yes | QMessageBox.No) QMessageBox.critical(self, "嚴重錯誤對話框", "數組越界,程序異常退出", QMessageBox.Yes | QMessageBox.No,) QMessageBox.about(self, "關于對話框", "你的Windows系統是DOS1.0") if __name__ == "__main__": app = QApplication(sys.argv) myWin = MyMainForm() myWin.show() sys.exit(app.exec_())
QInputDialog標準對話框控件
QInputDialog控件是一個標準對話框,用于獲取用戶輸入信息,QInputDialog控件可以提供數字、字符串輸入或提供下拉列表選擇。
針對QInputDialog對話框控件的使用,我們主要考慮2個問題:1、如何在彈出對話框供用戶輸入,2、如何獲取用戶輸入。
QInputDialog常用方法:
getint():從控件中獲得標準整數輸入
getDouble():從控件中獲得標準浮點數輸入
getText():從控件中獲得標準字符串的輸入
getItem() :從控件中獲得列表里的選項輸入
說明:QInputDialog控件
完整代碼如下:
# -*- coding: utf-8 -*- import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox,QInputDialog class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(382, 190) font = QtGui.QFont() font.setPointSize(9) font.setBold(False) font.setWeight(50) Form.setFont(font) self.GetIntlineEdit = QtWidgets.QLineEdit(Form) self.GetIntlineEdit.setGeometry(QtCore.QRect(150, 30, 150, 31)) self.GetIntlineEdit.setText("") self.GetIntlineEdit.setObjectName("GetIntlineEdit") self.GetstrlineEdit = QtWidgets.QLineEdit(Form) self.GetstrlineEdit.setGeometry(QtCore.QRect(150, 80, 150, 31)) self.GetstrlineEdit.setObjectName("GetstrlineEdit") self.GetItemlineEdit = QtWidgets.QLineEdit(Form) self.GetItemlineEdit.setGeometry(QtCore.QRect(150, 130, 150, 31)) self.GetItemlineEdit.setObjectName("GetItemlineEdit") self.getIntButton = QtWidgets.QPushButton(Form) self.getIntButton.setGeometry(QtCore.QRect(50, 30, 80, 31)) self.getIntButton.setObjectName("getIntButton") self.getStrButton = QtWidgets.QPushButton(Form) self.getStrButton.setGeometry(QtCore.QRect(50, 80, 80, 31)) self.getStrButton.setObjectName("getStrButton") self.getItemButton = QtWidgets.QPushButton(Form) self.getItemButton.setGeometry(QtCore.QRect(50, 130, 80, 31)) self.getItemButton.setObjectName("getItemButton") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "QInputDialog例子")) self.getIntButton.setText(_translate("Form", "獲取整數")) self.getStrButton.setText(_translate("Form", "獲取字符串")) self.getItemButton.setText(_translate("Form", "獲取列表選項")) class MyMainForm(QMainWindow, Ui_Form): def __init__(self, parent=None): super(MyMainForm, self).__init__(parent) self.setupUi(self) self.getIntButton.clicked.connect(self.getInt) self.getStrButton.clicked.connect(self.getStr) self.getItemButton.clicked.connect(self.getItem) def getInt(self): num, ok = QInputDialog.getInt(self, 'Integer input dialog', '輸入數字') if ok and num: self.GetIntlineEdit.setText(str(num)) def getStr(self): text, ok=QInputDialog.getText(self, 'Text Input Dialog', '輸入姓名:') if ok and text: self.GetstrlineEdit.setText(str(text)) def getItem(self): items=('C', 'C++', 'C#', 'JAva', 'Python') item, ok=QInputDialog.getItem(self, "select input dialog", '語言列表', items, 0, False) if ok and item: self.GetItemlineEdit.setText(str(item)) if __name__ == "__main__": app = QApplication(sys.argv) myWin = MyMainForm() myWin.show() sys.exit(app.exec_())
關鍵代碼介紹:
QInputDialog.getInt(self, 'Integer input dialog', '輸入數字') -> 輸入整數對話框
QInputDialog.getText(self, 'Text Input Dialog', '輸入姓名:') -> 輸入字符串對話框
QInputDialog.getItem(self, "select input dialog", '語言列表', items, 0, False) -> 下拉列表選擇對話框
QFileDialog文件對話框
QFileDialog是用于打開和保存文件的標準對話框。使用QFileDialog控件主要考慮2個場景:使用該控件提供用戶選擇目錄或文件,并保存選擇目錄或文件的路徑。簡單說就是實現類似word/Notepad++文件打開功能。如下
針對上述場景,QFileDialog控件實現的主要方法:
QFileDialog.getOpenFileName():獲取單個文件路徑
QFileDialog.getOpenFileNames():獲取多個文件路徑
QFileDialog.getExistingDirectory():獲取文件夾路徑
完整代碼如下:
# -*- coding: utf-8 -*- import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox,QInputDialog,QFileDialog class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(443, 120) self.widget = QtWidgets.QWidget(Form) self.widget.setGeometry(QtCore.QRect(50, 40, 301, 25)) self.widget.setObjectName("widget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.openFileButton = QtWidgets.QPushButton(self.widget) self.openFileButton.setObjectName("openFileButton") self.horizontalLayout.addWidget(self.openFileButton) self.filePathlineEdit = QtWidgets.QLineEdit(self.widget) self.filePathlineEdit.setObjectName("filePathlineEdit") self.horizontalLayout.addWidget(self.filePathlineEdit) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "QFileDialog打開文件例子")) self.openFileButton.setText(_translate("Form", "打開文件")) class MyMainForm(QMainWindow, Ui_Form): def __init__(self, parent=None): super(MyMainForm, self).__init__(parent) self.setupUi(self) self.openFileButton.clicked.connect(self.openFile) def openFile(self): get_directory_path = QFileDialog.getExistingDirectory(self, "選取指定文件夾", "C:/") self.filePathlineEdit.setText(str(get_directory_path)) get_filename_path, ok = QFileDialog.getOpenFileName(self, "選取單個文件", "C:/", "All Files (*);;Text Files (*.txt)") if ok: self.filePathlineEdit.setText(str(get_filename_path)) get_filenames_path, ok = QFileDialog.getOpenFileNames(self, "選取多個文件", "C:/", "All Files (*);;Text Files (*.txt)") if ok: self.filePathlineEdit.setText(str(' '.join(get_filenames_path))) if __name__ == "__main__": app = QApplication(sys.argv) myWin = MyMainForm() myWin.show() sys.exit(app.exec_())
關鍵代碼介紹
QFileDialog.getOpenFileName(self,"選取單個文件","C:/","All Files (*);;Text Files (*.txt)") -> 獲取單個指定文件的絕對路徑
getOpenFileName()參數說明:
第1個參數:用于指定父組件
第2個參數:對話框標題
第3個參數:對話框顯示時默認打開的目錄。"."表示當前程序所在目錄,“/”表示當前盤下的根目錄。
第4個參數:對話框中文件擴展名過濾器。All Files (*);;Text Files (*.txt)表示可以選擇所有文件類型或者只顯示.txt后綴的文件類型。
QFileDialog.getExistingDirectory(self,"選取指定文件夾","C:/") -> 獲取指定文件夾的絕對路徑
QFileDialog.getOpenFileNames(self,"選取多個文件","C:/","All Files (*);;Text Files (*.txt)") -> 獲取多個指定文件的絕對路徑
小結
本文介紹了消息彈出對話框、用戶輸入對話框以及文件打開對話框的基本使用方法。內容覆蓋了這三類控件的基本使用場景。可以開始動手嘗試了。。
以上所述是小編給大家介紹的PyQt5基本控件使用之消息彈出、用戶輸入、文件對話框的使用方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。