PyQt5快速入门教程(三) — 常用控件
回顾上节课
- Qt Designer基础用法
- 让python显示我们画的ui
什么你没有看? 好吧, 传送门走起
本节课内容
- 熟悉常用控件的功能
- 熟悉常用控件的命令
- QLabel(标签)
- QPushButton(按钮)
- QLineEdit(编辑框)
- QComboBox(下拉框)
- QCheckBox(复选框)
- QRadioButton(单选框)
- QListWidget(列表框)
- QTableWidget(表格)
注: 本教程为快速入门, 只会讲最常见用法
若想深究, 请百度 PyQt5 + 控件名看详解
让咱们开始吧!
环境
使用的环境和ui都是上节课里的, 代码如下
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from my_first_ui import * # 导入我们刚转换的ui
class MyWindows(Ui_MainWindow, QMainWindow):
def __init__(self):
super(MyWindows, self).__init__()
self.setupUi(self)
self.demo()
def demo(self):
"""
本节课所有的控件都在此函数里进行演示
"""
pass
app = QApplication(sys.argv)
my_windows = MyWindows() # 实例化对象
my_windows.show() # 显示窗口
sys.exit(app.exec_())
QLabel(标签)
Label用来显示一段文本, 一段html代码, 或者是一张图片
QLabel有3个最常用属性
属性名 | 说明 |
---|---|
text | 设置文字 |
pixmap | 图片 |
scaledContents | 图片缩放 |
未缩放的状态
缩放后状态
常用命令
self.label.setText("文本") # 设置label的文本
print(self.label.text()) # 输出label的文本
pic1 = QPixmap("zfb.png") # 加载1.png
pic1 = pic1.scaled(100, 200) # 把图片缩放为(100, 200), 没有这一句则不缩放
self.label.setPixmap(pic1) # 设置图片
pic2 = QPixmap()
url = "http://www.baidu.com/img/baidu_jgylogo3.gif"
pic2.loadFromData(requests.get(url).content) # 从网络上加载图片
self.label.setPixmap(pic2) # 设置图片
QPushButton(按钮)
不用说了, 大家都遇到很多次了
属性名 | 说明 |
---|---|
text | 默认显示文字 |
icon | 显示图片 |
iconSize | 显示图片的大小 |
def foo(*args):
print("foo被执行了, 带的数据是", args)
self.pushButton.setAutoRepeat(True) # 设置长按时重复执行任务
print(self.pushButton.isChecked()) # 提示按钮是否已按下
self.pushButton.Pressed.connect(foo) # 当鼠标指针在按钮上并按下左键时执行foo
self.pushButton.Released.connect(foo) # 当鼠标左键被释放时执行foo
self.pushButton.clicked.connect(foo) # 当鼠标左键被按下然后释放时,或者快捷键被释放时执行foo
self.pushButton.Toggled.connect(foo) # 当按钮的标记状态发生改变时执行foo
QLineEdit(编辑框)
用于输入一行数据, 如帐号, 密码
属性名 | 说明 |
---|---|
text | 默认显示文字 |
maxLength | 最大长度 |
echoMode | 显示风格 例如普通输入和密码输入 |
readOnly | 只读 只能看, 不能改 |
def foo(*args):
print("foo被执行了, 带的数据是", args)
self.lineEdit.setText("Hello World") # 设置文字
self.lineEdit.setEchoMode(QLineEdit.Normal) # 设置文本框的显示格式
# QLineEdit.Normal 正常显示所输入的字符,此为默认选项
# QLineEdit.NoEcho 不显示任何输入的字符,常用于密码类型的输入,且长度保密
# QLineEdit.Password 显示与平台相关的密码掩饰字符
# QLineEdit.PasswordEchoOnEdit 在编辑时显示字符,负责显示密码类型的输入
self.lineEdit.setClearButtonEnabled(True) # 在编辑框右边加入一个清空按钮
self.lineEdit.setMaxLength(10) # 设置所允许输入的最大字符数为10
self.lineEdit.setReadOnly(True) # 设置只读 False取消只读
self.lineEdit.setFocus() # 获取焦点
self.lineEdit.selectAll() # 全选
self.lineEdit.editingFinished.connect(foo) # 按下返回或回车键或线条编辑失去焦点时 执行foo
self.lineEdit.returnPressed.connect(foo) # 按下返回或回车键时 执行foo
self.lineEdit.textChanged.connect(foo) # 只要文字发生变化就会 执行foo, 包括setText()
self.lineEdit.textEdited.connect(foo) # 无论何时编辑文本都会 执行foo, 不包括setText()
QComboBox(下拉框)
用于在多组数据中选择一个
右键选择第一项可编辑预设选项
属性名 | 说明 |
---|---|
editable | 可否编辑 |
currentText | 现在文本 这个和下面那个同步 |
currentIndex | 现行选中项 |
maxVisibleItems | 下拉后最多显示多少项 |
def foo(*args):
print("foo被执行了, 带的数据是", args)
self.comboBox.addItems(["选项1", "选项2", "选项3"]) # 添加多个选项
self.comboBox.addItem("选项4") # 添加单个选项
self.comboBox.addItem(QIcon("icon.png"), "带图标的选项5") # 添加一个带图标的选项 图标为同目录下icon.png
self.comboBox.setCurrentIndex(1) # 设置选中第二个选项(第二个下标为1)
self.comboBox.setCurrentText("选项999") # 只有在editable选中时才有效
print(self.comboBox.currentIndex())
print(self.comboBox.currentText())
self.comboBox.currentIndexChanged.connect(foo) # 当选项改变时执行foo
self.comboBox.activated.connect(foo) # 当comboBox被选择时执行foo
QCheckBox(复选框)
用于确定是否勾选
属性名 | 说明 |
---|---|
text | 显示文字 |
icon | 显示图标 |
checkable | 可否被选中 |
checked | 设置已被选中状态 |
def foo(*args):
print("foo被执行了, 带的数据是", args)
self.checkBox.setText("测试文本") # 设置显示文字
print(self.checkBox.isChecked()) # True||False 打印是否被选中
self.checkBox.setChecked(True) # 用代码选中复选框 False为不选中
self.checkBox.stateChanged.connect(foo) # 选项改变时执行foo
QRadioButton(单选框)
用于在多个选项中选择一个
代码和QCheckBox几乎是一样的
属性名 | 说明 |
---|---|
text | 显示文字 |
icon | 显示图标 |
checkable | 可否被选中 |
checked | 设置已被选中状态 |
def foo(*args):
print("foo被执行了, 带的数据是", args)
self.radioButton.setText("测试文本") # 设置显示文字
print(self.radioButton.isChecked()) # True||False 打印是否被选中
self.radioButton.setChecked(True) # 用代码选中单选框 False为不选中
self.radioButton.stateChanged.connect(foo) # 选项改变时执行foo
QListWidget(列表框)
用于列出一堆东西, 比如日志/选项
属性名 | 说明 |
---|---|
currentRow | 现行选中项 |
右键点击第一项也会有一个设置选项的对话框
ListWidget的功能就比较复杂了
def foo(*args):
print("foo被执行了, 带的数据是", args)
self.listWidget.addItems(["选项1", "选项2", "选项3"])
self.listWidget.addItem("选项4")
self.listWidget.insertItem(0, "选项0") # 在0位置插入一个选项
self.listWidget.setCurrentItem(self.listWidget.item(1)) # 设置当前选中项为1
self.listWidget.sortItems() # 按升序重新排列条目
print(self.listWidget.item(3).text()) # 打印索引为3的项目的文本
print(self.listWidget.currentItem().text()) # 打印现行选中项的文本
print(self.listWidget.row(self.listWidget.currentItem())) # 打印现行选中项的索引
self.listWidget.clear() # 清空列表
self.listWidget.currentItemChanged.connect(foo) # 当列表中的条目发生改变时执行foo
self.listWidget.itemClicked.connect(foo) # 当点击列表中的条目时执行foo
QTableWidget(表格)
顾名思义, 就是显示出一个表格
由于表格的内容实在太多, 我推荐在这里详细学习传送门