PyQt5 标准输入对话框(QInputDialog)、打开文件对话框(QFileDialog)、颜色对话框(QColorDialog)、字体对话框(QFontDialog)

一、标准输入对话框

  1. QInputDialog 输入对话框 只让用户输入一行数据信息,比如 姓名、年龄等,可以方便的用来获取简单的信息

  2. QInputDialog常用的五种使用方法:

方法 描述
getText 弹出对话框,让用户输入 单行文本
getMultiLineText 弹出对话框,让用户输入 多行文本
getInt 弹出对话框,让用户输入 整数(int)
getDouble 弹出对话框,让用户输入 浮点数(float)
getItem 弹出对话框,让用户选择 选项
  1. 小案例
from PyQt5.Qt import *

app = QApplication([])
window = QWidget()
window.resize(300, 180)
window.move(300, 300)


def showName():
    name, ok = QInputDialog.getText(window, "修改姓名", '请输入姓名')
    if ok:
        lb3.setText(name)


def showAge():
    age, ok = QInputDialog.getInt(window, "修改年龄", "请输入年龄", min=1, max=100)
    if ok:
        lb4.setText(str(age))


lb1 = QLabel('姓名:', window)
lb1.resize(50, 40)
lb1.move(50, 20)

lb2 = QLabel("年龄:", window)
lb2.resize(50, 40)
lb2.move(50, 70)

lb3 = QLabel("张三", window)
lb3.resize(50, 40)
lb3.move(100, 20)

lb4 = QLabel("18", window)
lb4.resize(50, 40)
lb4.move(100, 70)

btn1 = QPushButton("修改姓名", window)
btn1.move(180, 30)

btn2 = QPushButton("修改年龄", window)
btn2.move(180, 80)

btn1.clicked.connect(showName)
btn2.clicked.connect(showAge)

window.show()
app.exec_()

二、打开文件对话框(选择文件框)

  • QFileDialog 类可以用来选择文件或者目录

  • QFileDialog 常用的方法

方法 说明
getExistingDirectory 选择目录
该方法,第一个参数是父窗口对象,第二个参数是选择框显示的标题
返回值即为选择的路径字符串,例如:G:/MaxServer
如果用户点击了 选择框的 取消选择按钮,返回 空字符串
getOpenFileName 选择单个文件

该方法返回值是一个元组,第一个元素是选择的文件路径,第二个元素是文件类型;
例如:('E:/Pictures/puke/puke1.png', 'Images(*.jpg; *.png)')

如果用户点击了 选择框的 取消选择按钮,返回 空字符串
getOpenFileNames 选择多个文件

该方法返回值是一个 元组,第一个元素是一个列表,里面包含了选择的文件路径,第二个元素是文件类型;
例如:(['E:/Pictures/puke/puke1.png', 'E:/Pictures/puke/puke2.png', 'E:/Pictures/puke/puke3.png'], 'Images(*.jpg; *.png)')

如果用户点击了 选择框的 取消选择按钮,返回 空列表
getSaveFileName 保存文件

该方法返回值是一个元组,通过选择路径和文件名,来保存一个文件,第一个元素是保存文件名的文件路径,第二个是文件类型;
例如:('E:/Pictures/puke/puk20.jpg', 'Images(*.jpg; *.png)')

如果用户点击了 选择框的 取消选择按钮,返回 空字符串

  1. 选择目录
  • 通过 getExistingDirectory 静态方法 选择目录,该方法,第一个参数是父窗口对象,第二个参数是选择框显示的标题

from PyQt5.QtWidgets import QFileDialog

filepath = QFileDialog.getExistingDirectory(window, "选择目录")

  • 返回值即为选择的路径字符串;如果用户点击了 选择框的 取消选择按钮,返回 空字符串

  • 小案例

from PyQt5.Qt import *
from PyQt5.QtWidgets import QFileDialog

app = QApplication([])
window = QWidget()
window.resize(300, 200)
window.move(300, 300)


def display():
    filepath = QFileDialog.getExistingDirectory(window, "选择目录")
    label.setText(filepath)


label = QLabel(window)
label.resize(200, 25)
label.move(10, 30)

btn = QPushButton(window)
btn.setText("选择")
btn.move(10, 80)
btn.clicked.connect(display)

window.show()
app.exec_()


  1. 选择单个文件
  • 如果你想弹出文件选择框,选择一个 已经存在 的文件,可以使用 QFileDialog 静态方法 getOpenFileName

from PyQt5.QtWidgets import QFileDialog

filepath, filetype = QFileDialog.getOpenFileName(
        window,  # 父窗口对象
        "选择文件",  # 窗口标题
        r"G:\\",  # 自定义起始目录
        "文件类型(*.txt;*.pdf);;文件类型(*.json);;文件类型(*.py;*.pyw)"  # 选择类型过滤,过滤内容再括号中,如果要有多个过滤器的话,可以用 ;; 分割
    )

  • 小案例
from PyQt5.Qt import *
from PyQt5.QtWidgets import QFileDialog

app = QApplication([])
window = QWidget()
window.resize(300, 200)
window.move(300, 300)


def display():
    filepath, filetype = QFileDialog.getOpenFileName(
        window,  # 父窗口对象
        "选择文件",  # 窗口标题
        r"G:\\",  # 自定义起始目录
        "文件类型(*.txt;*.pdf)"  # 选择类型过滤,过滤内容再括号中
    )
    label.setText(filepath)


label = QLabel(window)
label.resize(200, 25)
label.move(10, 30)

btn = QPushButton(window)
btn.setText("选择")
btn.move(10, 80)
btn.clicked.connect(display)

window.show()
app.exec_()


  1. 保存文件
  • 弹出文件选择框,选择路径和文件名,来 保存一个文件,通过 getSaveFileName

from PyQt5.QtWidgets import QFileDialog

filepath, filetype = QFileDialog.getSaveFileName(
        window,  # 父窗口对象
        "保存文件",  # 窗口标题
        r"G:\\",  # 自定义起始目录
        "All Files (*);;Text Files (*.txt)"  # 选择类型过滤,过滤内容再括号中,如果要有多个过滤器的话,可以用 ;; 分割
    )

  • 小案例
from PyQt5.QtWidgets import QFileDialog

app = QApplication([])
window = QWidget()
window.resize(300, 500)
window.move(300, 300)

def display():
    filepath, filetype = QFileDialog.getSaveFileName(
        window,  # 父窗口对象
        "保存文件",  # 窗口标题
        r"G:\\",  # 自定义起始目录
        "All Files (*);;Text Files (*.txt)"  # 选择类型过滤,过滤内容再括号中,如果要有多个过滤器的话,可以用 ;; 分割
    )
    label.setText(filepath)
    if filepath:
        with open(filepath, "w", encoding='utf-8') as f:
            f.write(text.toPlainText())
    else:
        label.setText("您没有选择保存的文件")

label = QLabel(window)
label.resize(200, 25)
label.move(10, 30)

btn = QPushButton(window)
btn.setText("保存")
btn.move(10, 80)
btn.clicked.connect(display)

text = QPlainTextEdit(window)
text.move(10, 200)

window.show()
app.exec_()


  1. 选择多个文件
  • 选择多个文件,使用 getOpenFileNames 静态方法
from PyQt5.QtWidgets import QFileDialog

filepaths, filetype = QFileDialog.getOpenFileNames(
        window,
        "上传图片",
        r"G:\\",
        "Images(*.jpg;*.png)"
    )

  • 小案例
from PyQt5.QtWidgets import QFileDialog

app = QApplication([])
window = QWidget()
window.resize(300, 500)
window.move(300, 300)


def openfiles():
    filepaths, filetype = QFileDialog.getOpenFileNames(
        window,
        "保存图片",
        r"G:\\",
        "Images(*.jpg;*.png)"
    )
    for file in filepaths:
        text.appendPlainText(file)

btn = QPushButton(window)
btn.setText("保存")
btn.move(10, 80)
btn.clicked.connect(openfiles)

text = QPlainTextEdit(window)
text.move(10, 200)

window.show()
app.exec_()


三、颜色对话框(QColorDialog)

  • 颜色对话框只要用于调度颜色选择面板,进行选择颜色

  • 主要用的是 QColorDialog

  • 颜色对话框取得颜色值是十六进制。


color = QColorDialog.getColor()
color.name()  # 此值就是颜色值的十六进制

color.isValid()    # 如果用户选中 OK 按钮,则返回True;反之返回 False


四、字体对话框

  • 字体对话框主要是针对调用字体选择框对字体进行修改

  • 主要是用 QFontDialog

  • 简单用法


font, ok = QFontDialog.getFont()

  • getFont(parent: QWidget = None) -> Tuple[QFont, bool]
    • getFont 返回值是一个元组,第一个元素是 QFont 对象(字体名称);第二个元素是布尔值,如果用户点击 Ok,则返回True,否则返回False

  • setFont()设置字体

font = QFont("微软雅黑", 9)
self.label.setFont(font)


综合小案例

from PyQt5.Qt import *
import sys


class Example:
    def InitUi(self, Form):
        self.Ui = Form
        self.Ui.resize(500, 400)

        self.textedit = QTextEdit(self.Ui)
        self.textedit.resize(360, 350)
        self.textedit.move(10, 20)

        self.btn1 = QPushButton(self.Ui)
        self.btn1.setText("打开文件")
        self.btn1.move(380, 20)
        self.btn1.clicked.connect(self.openfile)

        self.btn2 = QPushButton(self.Ui)
        self.btn2.setText("选择字体")
        self.btn2.move(380, 80)
        self.btn2.clicked.connect(self.choice_font)

        self.btn3 = QPushButton(self.Ui)
        self.btn3.setText('选择颜色')
        self.btn3.move(380, 140)
        self.btn3.clicked.connect(self.choice_color)

        self.btn4 = QPushButton(self.Ui)
        self.btn4.setText('保存文件')
        self.btn4.move(380, 200)
        self.btn4.clicked.connect(self.savefile)

    def openfile(self):
        filepath, _ = QFileDialog.getOpenFileName(self.Ui,
                                                  '选择文件',
                                                  './',
                                                  '文件(*.txt;*.pdf)',
                                                  )
        if filepath:
            with open(filepath, 'r') as f:
                self.textedit.clear()
                self.textedit.setText(f.read())

    def choice_font(self):
        font, ok = QFontDialog.getFont()
        if ok:
            self.textedit.setCurrentFont(font)

    def choice_color(self):
        color = QColorDialog.getColor()
        if color.isValid():  # Valid :有效的
            self.textedit.setTextColor(color)

    def savefile(self):
        filepath, _ = QFileDialog.getSaveFileName(self.Ui,
                                                  '选择路径',
                                                  './',
                                                  '文件类型(*.txt;*.pdf;*.csv)',
                                                  )
        if filepath:
            with open(filepath, 'a') as f:
                f.write(self.textedit.toPlainText())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    ui = Example()
    ui.InitUi(window)
    window.show()
    sys.exit(app.exec_())

posted @ 2021-06-29 16:10  廿九九  阅读(2159)  评论(0)    收藏  举报