笔者初学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 基本窗口设置及文本图片
- 设置窗口标题
setWindowTitle( ) 可以用来设置窗口的标题。
window = QWidget()
window.setWindowTitle('这里放置窗口的标题')
- 设置窗口的图标
此处图片的格式需要注意
icon = QIcon('logo.png')
window.setWindowIcon(icon)
- 文本控件 QLable() 类
# 创建QLable类
label = QLable()
label.setText('文本')
# 将文本控件添加到窗口中
label.setParent(window)
注意:添加文本也可以在创建类的时候直接添加
lable = QLable('文本')
lable = QLable()
# QPixmap() 的参数为图片的位置
pixmap = QPixmap('i.png')
label.setPixmap(pixmap)
label.setParent(window)
- 修改文字大小 QFont() 类
font = QFont()
# 40 为字号
font.setPixelSize(40)
# label 为上述的文本对象
lable.setFont(font)
2.2 输入框
- 单行文本 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(基本组件都有各自特有的预定义的信号)
- 示例:
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 函数
- 各种对象预定义的 信号
QT 对象 | 信号 |
---|
按钮 btn=QPushButton() | btn.clicked.connect() | 单选框rb=QRadioButton() | rb.toggled.connect() | 多选框ck=QCheckBox() | ck.stateChanged.connect() |
- 注意:connect() 中的参数只写槽函数的名称,不能调用槽函数(不能加括号)
3.基本布局
要将多个控件放入一个窗口中,我们需要在窗口中定义一个布局,用来规定多个控件在窗口中的展示方式。布局方式大致分为:
- 水平布局
- 竖直布局
- 网格布局
- 表单布局
3.1 水平布局 QHBoxLayout()
- 代码示例: 此处控件以按钮为例
# 创建布局
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()
- 代码示例: 此处控件以按钮为例
# 创建布局
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()
- 布局示例:
- 代码示例:其他控件加入表单布局要用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
- 布局示例:
- 代码示例 :网格布局一般会用到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
- 单选框示例:
- 代码示例:
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.
-
多选框示例: -
代码示例:
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 普通对话框
- 各种对话框的创建方式:
- 信息对话框 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’)
- 按钮类型:
类型 | 描述 |
---|
QMessageBox.Ok | 确定 | QMessageBox.Cancel | 取消 | QMessageBox.Yes | 同意 | QMessageBox.No | 不同意 | QMessageBox.Abort | 终止 | QMessageBox.Retry | 重试 | QMessageBox.Ignore | 忽略 |
5.2 QlnputDialog 输入对话框
- QIputDialog是输入对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成
- 创建对话框:
- str,success = QInputDialog.getText(w,'title’,'content’)
- 建立的输入对话框点击后会返回一个元组,如果点击 cancle 返回(’ ',False),点击 ok 会返回('输入内容’,True)
- 通过两个变量(str success),对元组解包,分别赋值
- 代码示例,通过按钮进入输入对话框
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 窗体的继承:
- 一般不会在主函数中构建窗体中的各种布局和控件,而是构建一个继承 Qwidget 的类,并在 新建的类中的构建函数(__init__(self))中创建窗口的相关元素。
- 注意再修改父类构造时,一定要先在子类中加载进父类的构造。具体见下代码。
- 要在子类中,不同函数引用的变量,可以用 self.变量名 定义。
- 在子类中可以通过前面加 __ 定义私有函数和属性,定义原则为:
- 当属性只是当前类使用时,就将其作为私有的
- 当函数只是当前类使用时,就将其作为私有的
- 代码示例:
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 ,文章中有错误或者用词不当的地方希望各位指出,嘿嘿。
|