分享

pyqt5 基础知识总结...

 大傻子的文渊阁 2022-11-23 发布于浙江

PYQT5 基本操作

笔者初学pyqt,通过查阅资料总结了一些pyqt的一些基本知识点,希望可以帮助到大家。话不多说,直接上货。

1.pyqt 窗口基本打开实现

# 导入PYQT 最常用的三个模块
from PyQt5.Qtwidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

import sys
# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口
window = QWidget()
# 显示窗口
window.show()
# 等待窗口停止
sys.exit(app.exec())

2.pyqt 基本控件

在导入上述 pyqt 常用三个模块的前提下,pyqt 中基本常用函数和类有以下几种。以下将根据功能例举出基本函数和类。

2.1 基本窗口设置及文本图片

  1. 设置窗口标题
    setWindowTitle( ) 可以用来设置窗口的标题。
window = QWidget()
window.setWindowTitle('这里放置窗口的标题')
  1. 设置窗口的图标
    此处图片的格式需要注意
icon = QIcon('logo.png')
window.setWindowIcon(icon)
  1. 文本控件 QLable() 类
  • 显示文本
# 创建QLable类
label = QLable()
label.setText('文本')
# 将文本控件添加到窗口中
label.setParent(window)

注意:添加文本也可以在创建类的时候直接添加

lable = QLable('文本')
  • 显示图片
lable = QLable()
# QPixmap() 的参数为图片的位置
pixmap = QPixmap('i.png')
label.setPixmap(pixmap)
label.setParent(window)
  1. 修改文字大小 QFont() 类
font = QFont()
# 40 为字号
font.setPixelSize(40)
# label 为上述的文本对象
lable.setFont(font)

2.2 输入框

  1. 单行文本 QLineEdit()
    基本api 及参数和描述:
api描述
setEchoMde()Normal,正常显示所输入的字符,默认选项
NoEcho,不显示任何输入的字符,常用于密码类型的输入,且其长度需要保密时
Password,显示与平台相关的密码掩码字符
PasswordEchoOnEdit,在编辑时显示字符,过一会儿变成其他符号
setPlaceholderText()设置文本框悬浮文字,输入字体后会将其覆盖,常用于提示输入
setText()设置文本框内容
setMaxLength()设置文本框所允许输入的最大字符数
text()获取文本框输入的内容

代码示例:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

import sys

if __name__ == '__main__':

    app = QApplication(sys.argv)
    window = QWidget()
    edit = QLineEdit()
    # 设置输入内容为 Password 格式
    edit.setEchoMode(edit.Password)
    # 设置悬浮提示
    edit.setPlaceholderText('请输入您的密码')
    edit.setParent(window)
    window.show()
    sys.exit(app.exec())

2.多行文本 QTextEdit()
基本api和描述:

api描述
setPlainText()设置多行文本框文本的内容
toPlainText()返回多行文本框的文本内容
setHtml()设置多行文本框的内容为HTML文档
toHtml()返回多行文本框的HTML文档内容
clear()清空多行文本框的内容
Tedit = QTextEdit()
Tedit.setPlainText('多行文本框的内容')
Tedit.setParent(window)

2.3 按钮

QPushButton 是最普通的按钮控件

# 创建按钮对象
btn = QPushButton()
# 添加提示
btn.setText('发送')

创建按钮时也可以直接传入提示文字

btn = QPushButtn('发送')

2.4 对象之间通信——信号和槽

简单解释:信号和槽机制是 QT 的核心机制,应用于对象之间的通信。

  • 信号(signal)其实就是一个事件被触发了
  • 槽(slot)其实是这个事件被触发后,处理事件逻辑的回调,主要是放处理逻辑的
  • 槽(slot)对应的是一个处理函数,有的时候我们称之为槽函数
  • Qt中对象已经包含了许多预定义的 signal(基本组件都有各自特有的预定义的信号
  1. 示例:
from PyQt5.Qtwidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

import sys
# 构建槽函数
def my_click():
	print("你点击了按钮")

app = QApplication(sys.argv)
window = QWidget()

# 创建按钮
btn = QPushButton('点击一下')
window.show()
# 创建按钮 btn 对应的连接
# clicked 为按钮类对象对应的信号
btn.clicked.connect(my_click)

sys.exit(app.exec())

clicked 是信号
my_click 是槽函数
通过 connect 将信号绑定到槽函数上,当按钮被点击时,就会调用 my_click 函数

  1. 各种对象预定义的 信号
QT 对象信号
按钮 btn=QPushButton()btn.clicked.connect()
单选框rb=QRadioButton()rb.toggled.connect()
多选框ck=QCheckBox()ck.stateChanged.connect()
  1. 注意:connect() 中的参数只写槽函数的名称,不能调用槽函数(不能加括号)

3.基本布局

要将多个控件放入一个窗口中,我们需要在窗口中定义一个布局,用来规定多个控件在窗口中的展示方式。布局方式大致分为:

  1. 水平布局
  2. 竖直布局
  3. 网格布局
  4. 表单布局

3.1 水平布局 QHBoxLayout()

  1. 代码示例: 此处控件以按钮为例
# 创建布局
layout = QHBoxLayout()
# 添加布局到窗口中
w.setLayout(layout)
# 建立按钮控件
btn1 = QPushButton('1')
btn2 = QPushButton('2')
btn3 = QPushButton('3')
# 将按钮控件添加到布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)

3.2 垂直布局 QVBoxLayout()

  1. 代码示例: 此处控件以按钮为例
# 创建布局
layout = QVBoxLayout()
# 添加布局到窗口中
w.setLayout(layout)
# 建立按钮控件
btn1 = QPushButton('1')
btn2 = QPushButton('2')
btn3 = QPushButton('3')
# 将按钮控件添加到布局中
layout.addWidget(btn1)
layout.addWidget(btn2)
layout.addWidget(btn3)

3.3 表单布局 QFormLayout()

  1. 布局示例:
    表单布局
  2. 代码示例:其他控件加入表单布局要用addRow( )
# 创建布局
layout = QFormLayout()
window.setLayout(layout)
# 创建布局里的其他控件
# 以布局示例为例,创建三个输入框,一个按钮
nameEdit = QLineEdit()
ageEdit = QLineEdit()
phoneEdit = QLineEdit()
btn = QPushButton('发送')
# 将控件加入到 表单布局中
# addRow 第一个参数为表单前面的描述
layout.addRow('姓名',nameEdit)
layout.addRow('年纪',ageEdit)
layout.addRow('电话',phoneEdit)
layout.addRow(btn)

3.5 网格布局QGridLayout

  1. 布局示例:
    网格布局
  2. 代码示例 :网格布局一般会用到while循环来放置控件
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

# 1.创建应用程序
app = QApplication(sys.argv)
# 2.创建窗口
w = QWidget()
# 修改窗口标题
w.setWindowTitle('表单布局')
"""------------------ 创建布局 ------------------"""
layout = QGridLayout()
# 添加到窗口中
w.setLayout(layout)
# 此处 i j 为网格布局的坐标
for i in range(4):
    for j in range(4):
        btn = QPushButton("按钮 {} {}".format(i, j))
# 添加控件时需要说明在网格布局的位置坐标
        layout.addWidget(btn, i, j)

# 3.显示窗口
w.show()
# 4.等待窗口停止
sys.exit(app.exec())

4.单选框和多选框

4.1 单选框

  • QRadioButton是单选按钮,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项.
  • 单选框选中的信号是: toggled
  1. 单选框示例:
    单选框
  2. 代码示例:
rom PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

# checked 为自动返回的状态参数,选中为True,反之为False
def func(checked):
    '''
    状态变化的槽函数
    :param checked: 是否被选中
    :return:
    '''
    print('状态变化',checked)

# 1.创建应用程序
app = QApplication(sys.argv)
# 2.创建窗口
window = QWidget()
# 修改窗口标题
window.setWindowTitle('单选框')
"""------------------ 创建布局 ------------------"""
layout = QHBoxLayout()
# 添加布局到窗口中
window.setLayout(layout)
# 创建两个单选框
rb1 = QRadioButton('男')
rb2 = QRadioButton('女')
# 设置rb1 为默认选项
rb1.setChecked(True)
# 添加到布局中
layout.addWidget(rb1)
layout.addWidget(rb2)

# 绑定信号和槽
rb1.toggled.connect(func)

# 3.显示窗口
window.show()

# 4.等待窗口停止
sys.exit(app.exec())

4.2 多选框

  • QCheckBox 提供了一组带文本标签的复选框,用户可以选择多个选项。
  • 多选框选中的信号是:stateChanged
  • 多选框会自动传回一个参数,state,选中为2,未选中为0.
  1. 多选框示例:
    多选框

  2. 代码示例:

rom PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys


def func(state):
    if state == 2:
        print('选中')
    elif state == 0:
        print('取消选中')
# 1.创建应用程序
app = QApplication(sys.argv)
# 2.创建窗口
window = QWidget()
# 修改窗口标题
window.setWindowTitle('复选框')
"""------------------ 窗口布局 ------------------"""
layout = QHBoxLayout()
# 添加到窗口中
window.setLayout(layout)

# 控件
label = QLabel()
label.setText('爱好:')
ck1 = QCheckBox('抽烟')
ck2 = QCheckBox('喝酒')
ck3 = QCheckBox('烫头')

# 第一个默认选中
# ck1.setChecked(True)

# 添加控件到布局中
layout.addWidget(label)
layout.addWidget(ck1)
layout.addWidget(ck2)
layout.addWidget(ck3)

# 绑定信号和槽
ck1.stateChanged.connect(func)

# 3.显示窗口
window.show()

# 4.等待窗口停止
sys.exit(app.exec())

5.对话框

5.1 QMessageBox 普通对话框

  1. 各种对话框的创建方式:
  • 信息对话框 param:parent , title, content
    QMessageBox.information(window,'我是对话框标题’,'我是对话框的内容’)
  • 问答对话框:** 注意:只要对话框弹出之后有选项,那么选择这个选项就会返回一个数据,以问答对话框为例,展示这一内容:
result = QMessageBox.question(window,'title','content')
if result == QMessageBox.Yes:
	print('yes')
else:
	print('no')
  • 警告对话框:
    QMessageBox.warning(window,'title’,'content’)
  • 严重错误对话框:
    QMessageBox.ctitical(window,'title’,'content’)
  • 关于对话框:
    QMessageBox.about(window,'title’,'content’)
  1. 按钮类型:
    类型描述
    QMessageBox.Ok确定
    QMessageBox.Cancel取消
    QMessageBox.Yes同意
    QMessageBox.No不同意
    QMessageBox.Abort终止
    QMessageBox.Retry重试
    QMessageBox.Ignore忽略

5.2 QlnputDialog 输入对话框

  1. QIputDialog是输入对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成
    对话框
  2. 创建对话框:
  • str,success = QInputDialog.getText(w,'title’,'content’)
  • 建立的输入对话框点击后会返回一个元组,如果点击 cancle 返回(’ ',False),点击 ok 会返回('输入内容’,True)
  • 通过两个变量(str success),对元组解包,分别赋值
  1. 代码示例,通过按钮进入输入对话框
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QIcon
import sys

def func():
    str,success = QInputDialog.getText(w,'提示','请输入角色名称')
    if success:
        edit.setText(str)
# 1.创建应用程序
app = QApplication(sys.argv)
# 2.创建窗口
w = QWidget()

# 修改窗口标题
w.setWindowTitle('输入提示框')
"""------------------ 创建界面 ------------------"""
layout = QHBoxLayout()
# 添加布局
w.setLayout(layout)

# 控件
btn = QPushButton('创建角色')
edit = QLineEdit()
# 控件添加到布局中
layout.addWidget(btn)
layout.addWidget(edit)

# 信号和槽函数绑定
# 通过一个按钮进入输入对话框
btn.clicked.connect(func)

# 3.显示窗口
w.show()

# 4.等待窗口停止
sys.exit(app.exec())

6 窗体的继承:

  1. 一般不会在主函数中构建窗体中的各种布局和控件,而是构建一个继承 Qwidget 的类,并在 新建的类中的构建函数(__init__(self))中创建窗口的相关元素。
  2. 注意再修改父类构造时,一定要先在子类中加载进父类的构造。具体见下代码。
  3. 要在子类中,不同函数引用的变量,可以用 self.变量名 定义。
  4. 在子类中可以通过前面加 __ 定义私有函数和属性,定义原则为:
  • 当属性只是当前类使用时,就将其作为私有的
  • 当函数只是当前类使用时,就将其作为私有的
  1. 代码示例:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

class MyWindow(QWidget):

    def __init__(self):
    # super 用来加载父类中的构造
        super(MyWindow, self).__init__()
        self.setWindowTitle('title')
        self.__init_ui()

    def __init_ui(self):
        layout = QHBoxLayout()
        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 在主函数中只需要创建 window 类
    window = MyWindow()
    window.__init_ui()
    window.show()
    sys.exit(app.exec_())

7 总结

以上为pyqt创建窗口的一些基本知识,不同布局在窗口的放置将在下一篇文章中提到,笔者也是初学pyqt ,文章中有错误或者用词不当的地方希望各位指出,嘿嘿。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多