首页 > 其他分享 >PyQt GUI开发基础-1

PyQt GUI开发基础-1

时间:2024-09-10 17:23:13浏览次数:13  
标签:Form GUI PyQt QtWidgets 开发 formLayoutWidget lineEdit label self

(目录)


一、QFileDialog文件对话框控件

方法 说明
getOpenFileName() 获取一个打开文件的文件名
getOpenFileNames() 获取多个打开文件的文件名
getSaveFileName() 获取保存的文件名
getExistingDirectory() 获取一个打开的文件夹
setAcceptMode() 设置接收模式,取值如下。QFileDialog.AcceptOpen:设置文件对话框为打开模式,这是默认值;OFileDialog.AcceptSave:设置文件对话框为保存模式
setDefaultSuffix() 设置文件对话框中的文件名的默认后缀名
setFileMode() 设置可以选择的文件类型,取值如下。QFileDialog.FileMode.AnyFile:任意文件(无论文件是否存在)﹔QFileDialog.FileMode.ExistingFile:已存在的文件;QFileDialog.FileMode.ExistingFiles:已存在的多个文件;QFileDialog.FileMode.Directory:文件夹;QFileDialog.FileMode.DirectoryOnly:文件夹(选择时只能选中文件夹)
setDirectory() 设置文件对话框的默认打开位置
setNameFilter() 设置名称过滤器,多个类型的过滤器之间用两个分号分割(例如:所有文件(.);Python文件(.py))﹔而一个过滤器中如果有多种格式,可以用空格分割(例如:图片文件(.jpg .png.bmp))
setViewMode() 设置显示模式,取值如下。QFileDialog.Detail:显示文件详细信息,包括文件名、大小、日期等信息;QFileDialog.List:以列表形式显示文件名
selectedFile() 获取选择的一个文件或文件夹名字
selectedFiles() 获取选择的多个文件或文件夹名字

例子

from PyQt6 import QtCore, QtWidgets
import sys

from PyQt6.QtWidgets import QApplication, QPushButton, QFileDialog, QWidget


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(566, 438)
        self.pushButton = QtWidgets.QPushButton(parent=Form)
        self.pushButton.setGeometry(QtCore.QRect(210, 180, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "选择文件"))


def selectFile():
    fd = QFileDialog()
    fd.setFileMode(QFileDialog.FileMode.ExistingFiles)  # 设置多选
    fd.setDirectory("C:\\")  # 设置初始化路径
    fd.setNameFilter("图片文件(*.jpg *.png *.bmp *.ico *.gif)")  # 设置只选择图片文件
    if fd.exec():  # 执行
        print(fd.selectedFiles())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QWidget()
    ui = Ui_Form()
    ui.setupUi(window)

    pushButton: QPushButton = ui.pushButton
    pushButton.clicked.connect(selectFile)

    window.show()
    sys.exit(app.exec())

二、QInputDialog输入对话框控件

QInputDialog类的常用方法:

  • getText()的的参数及返回值
参数 说明
QWidget 父窗口对象
dglTitle QInputDialog的标题
txtLabel QInputDialog内部显示的文本
echoMode 文本编辑框内容的显示方式
返回值 一个元组,其中text表示文本编辑框内的字符串,flag表示是否正常返回
  • getItem()方法的参数及返回值
参数 说明
QWidget 父窗口对象
dglTitle QInputDialog的标题
txtLabel QlnputDialog内部显示的文本
items ComboBox组件的内容列表
curIndex 默认显示ComboBox 组件哪一个索引的内容
editable ComboBox组件是否可被编辑
返回值 一个元组,其中 text 表示从ComboBox下拉列表中选择的内容,flag表示是否正常返回
  • getInt()方法的参数及返回值
参数 说明
QWidget 父窗口对象
dglTitle QInputDialog的标题
txtLabel QInputDialog内部显示的文本
defaultValue SpinBox控件默认值
minValue SpinBox控件最小值
maxValue SpinBox控件最大值
stepValue SpinBox控件单步值
返回值 一个元组,其中 inputValue表示SpinBox中选择的整数值,flag表示是否正常返回
  • getDouble()方法的参数及返回值
参数 说明
QWidget 父窗口对象
dglTitle QInputDialog的标题
txtLabel QInputDialog内部显示的文本
defaultValue DoubleSpinBox控件默认值
minValue DoubleSpinBox控件最小值
maxValue DoubleSpinBox控件最大值
decimals DoubleSpinBox控件显示的小数点位数控制
返回值 一个元组,其中 inputValue表示DoubleSpinBox中选择的小数值,flag 表示是否正常返回
from PyQt6 import QtCore, QtWidgets
import sys

from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QInputDialog


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(267, 220)
        self.formLayoutWidget = QtWidgets.QWidget(parent=Form)
        self.formLayoutWidget.setGeometry(QtCore.QRect(20, 10, 231, 191))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout.setContentsMargins(10, 10, 10, 0)
        self.formLayout.setHorizontalSpacing(10)
        self.formLayout.setVerticalSpacing(20)
        self.formLayout.setObjectName("formLayout")
        self.label = QtWidgets.QLabel(parent=self.formLayoutWidget)
        self.label.setObjectName("label")
        self.formLayout.setWidget(
            0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label
        )
        self.lineEdit = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.lineEdit.setObjectName("lineEdit")
        self.formLayout.setWidget(
            0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.lineEdit
        )
        self.lineEdit_2 = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.formLayout.setWidget(
            1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.lineEdit_2
        )
        self.label_2 = QtWidgets.QLabel(parent=self.formLayoutWidget)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(
            1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2
        )
        self.label_3 = QtWidgets.QLabel(parent=self.formLayoutWidget)
        self.label_3.setObjectName("label_3")
        self.formLayout.setWidget(
            2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_3
        )
        self.lineEdit_3 = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.formLayout.setWidget(
            2, QtWidgets.QFormLayout.ItemRole.FieldRole, self.lineEdit_3
        )
        self.label_4 = QtWidgets.QLabel(parent=self.formLayoutWidget)
        self.label_4.setObjectName("label_4")
        self.formLayout.setWidget(
            3, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_4
        )
        self.lineEdit_4 = QtWidgets.QLineEdit(parent=self.formLayoutWidget)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.formLayout.setWidget(
            3, QtWidgets.QFormLayout.ItemRole.FieldRole, self.lineEdit_4
        )

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "姓名:"))
        self.label_2.setText(_translate("Form", "年龄:"))
        self.label_3.setText(_translate("Form", "班级:"))
        self.label_4.setText(_translate("Form", "分数:"))


def getName(formLayoutWidget, name_input):
    name, ok = QInputDialog.getText(
        formLayoutWidget, "姓名", "请输入姓名", QLineEdit.EchoMode.Normal, "python222"
    )
    if ok:
        name_input.setText(name)


def getGrade(formLayoutWidget, grade_input):
    grade, ok = QInputDialog.getItem(
        formLayoutWidget,
        "班级",
        "请选择班级",
        ("大一1班", "大一2班", "大一3班"),
        0,
        False,
    )
    if ok:
        grade_input.setText(grade)


def getAge(formLayoutWidget, age_input):
    age, ok = QInputDialog.getInt(formLayoutWidget, "年龄", "请选择年龄", 18, 1, 100, 1)
    if ok:
        age_input.setText(str(age))


def getScore(formLayoutWidget, score_input):
    score, ok = QInputDialog.getDouble(
        formLayoutWidget, "分数", "请选择分数", 98.5, 0, 100, 2
    )
    if ok:
        score_input.setText(str(score))


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = QWidget()
    ui = Ui_Form()
    ui.setupUi(window)

    formLayoutWidget = ui.formLayoutWidget
    name_input: QLineEdit = ui.lineEdit
    name_input.returnPressed.connect(lambda: getName(formLayoutWidget, name_input))

    grade_input: QLineEdit = ui.lineEdit_3
    grade_input.returnPressed.connect(lambda: getGrade(formLayoutWidget, grade_input))

    age_input: QLineEdit = ui.lineEdit_2
    age_input.returnPressed.connect(lambda: getAge(formLayoutWidget, age_input))

    score_input: QLineEdit = ui.lineEdit_4
    score_input.returnPressed.connect(lambda: getScore(formLayoutWidget, score_input))

    window.show()

    sys.exit(app.exec())

三、控件支持的图标

支持.png和.ico文件格式。 图标的获取可以到:阿里巴巴矢量图标库

四、QFontDialog字体对话框控件

import sys

from PyQt6.QtGui import QFont
from PyQt6.QtWidgets import (
    QApplication,
    QWidget,
    QPushButton,
    QMessageBox,
    QLineEdit,
    QInputDialog,
    QFontDialog,
)
from FontDialog import Ui_Form


def selectFont():
    font, ok = QFontDialog.getFont()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QWidget()
    ui = Ui_Form()
    ui.setupUi(window)

    pushButton: QPushButton = ui.pushButton
    pushButton.clicked.connect(selectFont)

    window.show()

    sys.exit(app.exec())

五、QColorDialog颜色对话框控件

import sys

from PyQt6.QtGui import QFont
from PyQt6.QtWidgets import (
    QApplication,
    QWidget,
    QPushButton,
    QColorDialog,
)

from ColorDialog import Ui_Form


def selectColor():
    color, ok = QColorDialog.getColor()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QWidget()
    ui = Ui_Form()
    ui.setupUi(window)

    pushButton: QPushButton = ui.pushButton
    pushButton.clicked.connect(selectColor)

    window.show()

    sys.exit(app.exec())

标签:Form,GUI,PyQt,QtWidgets,开发,formLayoutWidget,lineEdit,label,self
From: https://blog.51cto.com/cerana/11972322

相关文章

  • 即时聊天系统源码设计开发​
    一、引言随着移动互联网的快速发展,即时通讯软件已成为人们日常生活中不可或缺的一部分。仿微信QQ聊天系统作为一种模仿主流聊天软件功能的应用,旨在为用户提供高效、便捷的沟通方式。本文将从系统架构、功能模块等方面详细介绍仿微信QQ聊天系统的设计与实现。二、系统架构仿微信QQ聊......
  • 【北京迅为】itop-3562开发板快速测试手册第1章 Android13系统功能测试
              迅为iTOP-3562开发板采用瑞芯微RK3562处理器,主频2.0GHz,采用四核A53+MaliG52架构,主频2GHz,内置1TOPSNPU算力,具有多个嵌入式硬件引擎,以优化高端应用的性能。   公众号:迅为电子--------------------------------    第1章Android13系统......
  • 基于python+flask框架的在线新闻发布系统的设计与开发(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,信息传播的速度与广度达到了前所未有的高度。新闻作为社会信息的重要载体,其发布与传播的方式直接影响着公众对时......
  • PY32F002A单片机开发板 PY32F002AF15P6开发板 32位MCU,M0+内核
    PY32F002A开发板上搭载的是PY32F002AF15P6单片机,TSSOP20封装,开发板使用TypeC接口供电,可以用来对PY32F002A芯片进行开发调试。PY32F002A开发板推荐使用我们的PY32link来下载仿真,绝大部分的STlink,Jlink,DAPlink也可以下载仿真,需自行测试。开发资料齐全,提供了LL库和HAL库,支持IAR......
  • java上传文件接口开发uploadFile
    controller层:@PostMapping("/uploadFile")publicServiceResultuploadFile(MultipartFilefile,@RequestParamStringcompareType){returnprimaryService.uploadFile(file,compareType);}service层:/***样本文件上传*@p......
  • 平台开发到落地详解:从食堂采购系统源码到可视化供应链管理数据大屏
    随着数字化转型的加速,越来越多的企业和组织开始重视供应链的智能化与可视化管理。在食堂采购领域,供应链管理的复杂性与日俱增,而传统的手工操作往往效率低下、容易出错。因此,开发食堂采购系统并结合可视化数据大屏的解决方案,成为了许多企业提高运营效率、优化采购流程的关键手段。 ......
  • 使用AI工具辅助开发会成为未来的趋势
    AI工具辅助开发会成为未来的趋势引言在软件开发领域,技术的快速演进和复杂性的增加使得开发工作变得更加具有挑战性。传统的开发流程往往需要大量的手动编码和测试,这不仅耗时耗力,而且容易出错。随着人工智能(AI)技术的不断进步,AI工具逐渐成为开发人员的重要助手。本文将探讨AI......
  • ColchisFM 新模块发布 | ColchisFM-Python开发接口功能模块
    Python作为目前最流行的一种高级编程语言,‌以其易读性和易用性而闻名。‌特别在人工智能和数学计算上,有着天然的优势和丰富的开源算法库。ColchisFM在地质模型构建方面具有智能化、矢量化、可见即可得的特点。自动化建立地层格架,处理复杂正/逆断层、地层尖灭、地层超覆、削截、......
  • 台球助教系统开发:源码搭建部署
    台球助教系统的开发是一个涉及技术、用户需求和功能实现等多方面因素的复杂过程。以下是对台球助教系统开发的一个全面概述:一、系统概述台球助教系统旨在通过技术手段提升台球学员的学习效率与体验,为台球爱好者、初学者至中高级水平的学员以及专业教练提供一个高效、智能的学......
  • 台球助教小程序开发/APP源码部署
    开发一个美女台球助教微信小程序,需要综合考虑技术实现、用户体验、内容合规性以及市场推广等多个方面。下面是一个大致的开发流程和关键要点:1.市场调研与需求分析目标用户定位:明确你的小程序主要服务于哪些人群,比如台球爱好者、初学者、专业球员等。功能需求分析:确定小程序......