PyQT5控件常用功能


前言

用于记录PyQT开发中遇到的控件操作

Qt开场白

def main():
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("./icons/应用图标.ico"))#设置软件图标
    # app.setWindowIcon(QIcon("./icons/应用图标.jpg"))
    window = Mainapp()
    window.show()
    app.exec_()

if __name__ == '__main__':
    main()

一、Layouts

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1、布局控制

在进行布局是,将布局中控件的sizePolicy调整为Expanding,水平布局调整水平策略,垂直布局则调整垂直策略,然后设置水平延展的比例,若第一份占3/4,则设置第一份的水平延展为3。
在这里插入图片描述

2、Form Layout:表单布局

可用于设置表单模式填写登陆信息或者表单对其信息
在这里插入图片描述

二、Spacers

1.引入库

三、Buttons

1、pushButton

#设置按钮不可用
self.PushButton_7.setEnabled(True)
#隐式函数编写
self.PushButton_8.clicked.connect(lambda: self.PushButton_7.setEnabled(False))

2、单选按钮

3、复选按钮

状态: isChecked:判断复选框是否勾选
信号: stateChanged:勾选或取消勾选发射信号
全选组件

 def changecb1(self):
        if self.cb1.checkState() == Qt.Checked:
            self.cb2.setChecked(True)
            self.cb3.setChecked(True)
            self.cb4.setChecked(True)
        elif self.cb1.checkState() == Qt.Unchecked:
            self.cb2.setChecked(False)
            self.cb3.setChecked(False)
            self.cb4.setChecked(False)

四、Item Views

五、Item Widgets

Table Widgets

表头设置一定要放在行列后面,不然无法显示表头,在进行表格初始化时一定要先设定表格的行列

# 设置行列,设置表头
self.tableWidget_author.setRowCount(len(data))
self.tableWidget_author.setColumnCount(len(data[0]))
self.tableWidget_author.setHorizontalHeaderLabels(["姓名","电话","性别","家庭住址"])
# 表格加载内容
for row, form in enumerate(data):
    for column, item in enumerate(form):
        self.tableWidget_author.setItem(row, column, QTableWidgetItem(str(item)))

六、Contains

Tab Widget

隐藏标签栏
self.tabWidget.tabBar().setVisible(False)
显示第0页
self.tabWidget.setCurrentIndex(0)

七、Input Widgets

Combo Box

使用qfluentwidgets的designer时,部分信号与原生designer插件的信号有所出入,activated()等信号无法使用,用currentTextChanged()作为信号触发器
pyQT5中ComboBox的用法

#添加一个下拉选项
self.comboBox.addItem("默认文本")
#从列表中添加下拉选项
self.comboBox.addItems(["文本1", "文本2", "文本3"])
#设置显示项目
self.comboBox.setCurrentIndex(2)
#获取索引
self.comboBox.currentIndex()
#获取当前文本
self.comboBox.currentText()
#设置当前文本
self.comboBox.setCurrentText("你是谁")

LineEdit

配合校验器实现输入文本限制
配置校验器

def settings(self):
      # 整数校验器 [1,99]
       intValidator = QIntValidator(self)
       intValidator.setRange(1,99)

       # 浮点校验器 [-360,360],精度:小数点后2位
       doubleValidator = QDoubleValidator(self)
       doubleValidator.setRange(-360,360)
       doubleValidator.setNotation(QDoubleValidator.StandardNotation)
       # 设置精度,小数点2位
       doubleValidator.setDecimals(2)

       # 字符和数字
       reg = QRegExp('[a-zA-Z0-9]+$')
       validator = QRegExpValidator(self)
       validator.setRegExp(reg)

       # 设置校验器
       self.ui.lineEdit.setValidator(intValidator)
       self.ui.lineEdit_2.setValidator(doubleValidator)
       self.ui.lineEdit_3.setValidator(validator)

QValidator 是一个抽象类,有一些子类:
链接: 校验器的使用
setRange范围设置通常无法设置到个位,应尽量避免用此种方式做范围限制
QIntValidator设置合法 int
可以设置其range,setRange()
QDoubleValidator 设置合法 Double
可以设置range setRange, ,小数点后位数setDecimals
QRegExpValidator 是用来结合正则表达式,判断合法性,利用正则表达式自由发挥
QRegExp, PyQt中的正则表达式类,设置正则表达式对象
setRegExp,指定校验器的正则表达式

 # 字符和数字
reg = QRegExp('[a-zA-Z0-9]+$')
validator = QRegExpValidator(self)
validator.setRegExp(reg)
self.lineEdit_3.setValidator(validator)

LineEdit有四种回显模式Normal、NoEcho、Password、PasswordEchoOnEdit

文本获取
self.LineEdit.text()
文本输入
self.LineEdit.setText(data[5])
悬浮文本设置
self.LineEdit_7.setPlaceholderText("Normal回显模式")

TextEdit

文本获取
self.TextEdit.toPlainText()
文本输入
self.textEdit.setPlainText('Hello World,世界你好吗?')
信号控制,输入结束时,触发信号
self.lineEdit_client_tel.editingFinished.connect(self.tel_warning_add)

八、Display Widgets

Label

#设置文本
self.label_edit_tel.setText("请输入正确的电话号码")
#获取文本
text()
#设置伙伴关系
setBuddy()
#选择返回字符
selectedText()
#设置图片
self.label.setPixmap(QPixmap("test.png"))

#常用信号
#仅当标签文本为超链接时生效,普通文本两种信号无法生效
self.label_3.setText("<a href='https://www.baidu.com'>百度一下</a>")
#鼠标滑过触发
linkHovered
#鼠标点击触发
linkActivated

九、其他类

1、QTimer

信号: timeout

#实例化类
self.timer = QTimer()
#设置时间间隔(ms)
self.timer.setInterval(100)
#计时器连接函数
self.timer.timeout.connect(self.timer_control)
    def timer_control(self):
        sender = self.sender()
        if sender == self.PushButton_6:
            if self.PushButton_6.text() == "启动定时器":
                self.timer.start()
                self.PushButton_6.setText("暂停")
            elif self.PushButton_6.text() == "暂停":
                self.timer.stop()
                self.PushButton_6.setText("继续")
            elif self.PushButton_6.text() == "继续":
                self.timer.start()
                self.PushButton_6.setText("暂停")
        if sender == self.PushButton_7:
            self.timer.stop()
            self.timer_date = 0
            self.PushButton_6.setText("启动定时器")
        if sender == self.timer:
            self.timer_date +=1
        if self.timer_date == 100:
            self.timer_date = 0
            self.timer.stop()
            self.PushButton_6.setText("启动定时器")
        self.Slider.setValue(self.timer_date)

2、对话框

2.1 文件对话框

返回值是一个元组,第一个值是路径,第二个是文本类型

    def runQfileDialog(self):
        #第三个参数进行文件格式进行限制
        file = QFileDialog.getOpenFileName(self,"打开文件","./",("文本(*.txt)"))
        file_save = QFileDialog.getSaveFileName(self,"保存文件","./",("文本(*.txt)"))

2.2 字体对话框

    def runQfontDialog(self):
        font,ok = QFontDialog.getFont()
        self.TextEdit.setCurrentFont(font)

2.3 颜色对话框

#一个返回值
    def runQcolorDialog(self):
        col = QColorDialog.getColor()
        self.TextEdit.setTextBackgroundColor(col)

2.4 进度条对话框

#进度条对话框
    def runQprogressDialog(self):
        num = 100000
        progress = QProgressDialog(self)
        progress.setWindowTitle("请稍等")
        progress.setLabelText("正在操作...")
        progress.setCancelButtonText("取消")
        progress.setMinimumDuration(5)
        progress.setWindowModality(Qt.WindowModal)
        progress.setRange(0, num)
        for i in range(num):
            progress.setValue(i)
            if progress.wasCanceled():
                QMessageBox.warning(self, "提示", "操作失败")
                break
        else:
            progress.setValue(num)
            QMessageBox.information(self, "提示", "操作成功")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值