0 前言
控件内不能含有其他控件的,称为基本控件,部分基本控件经常用于显示信息
基本控件继承关系:
QWidget
- QFrame
- QAbstractScrollArea
- QTextEdit
- QLabel
- QLineEdit
- QProgressBar
1 标签 QLabel
QLabel是APP界面的一块只读区域,用于显示文本、显示图片、放置gif动画、超链接和提示标记
1.1 方法列表 QLabel QPixmap
QLabel类 | 说明 |
---|---|
self=QLabel(QIcon, text, parent) | 创建实例和文字QIcon ->控件图标,QIcon类,可省略text ->字符串,可省略parent ->父控件,使用布局时可省略 |
self.setText(text) | 设置控件文字text ->字符串 |
=self.text() | 读取控件文字,输出字符串 |
self.clear() | 清除内容 |
self.setPixmap(picture) | 设置控件显示一个图片picture ->QPixmap类 |
self.setAlignment() | 输入PyQt5.QtCore中常量Qt.AlignLeft :文字水平方向靠左对齐Qt.AlignRight :文字水平方向靠右对齐Qt.AlignCenter :文字水平方向居中对齐Qt.AlignJustify :文字水平方向调整间距两端对齐 |
继承自QWidget类的方法 | |
x , y , width , height , ... | 几何类方法,详见窗口的几何数据 |
QPixmap类 | 说明 |
---|---|
from PyQt5.QtGui import * self=QPixmap(file) | 创建实例file ->文件路径 |
self.scaled(width, height, AspectRatioMode, TransformationMode) | 设置图片尺寸 AspectRatioMode:PyQt.QtCore中可选常量: Qt.IgnoreAspectRatio : 不保持图片长宽比Qt.KeepAspectRatio : 保持长宽比并保持整个图片可见Qt.KeepAspectRatioByExpanding : 保持长宽比并填满显示区域TransformationMode:PyQt.QtCore中可选常量: FastTransformation : 快速缩放SmoothTransformation : 光滑缩放 |
1.2 示例 文字标签
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('标签')
hlayout = QHBoxLayout()
self.setLayout(hlayout)
label = QLabel('开始')
label.setAlignment(Qt.AlignCenter) # Qt.AlignCenter需要载入PyQt5.QtCore库
hlayout.addWidget(label)
btn = QPushButton()
hlayout.addWidget(btn)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
1.3 示例 图片标签
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('标签')
hlayout = QHBoxLayout()
self.setLayout(hlayout)
label = QLabel()
label.setFixedSize(150, 150)
img = QPixmap('switch.jpg')
# 设定图片尺寸
result = img.scaled(label.width(), label.height(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
label.setPixmap(result)
hlayout.addWidget(label)
btn = QPushButton()
hlayout.addWidget(btn)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
2 单行文本框 QLineEdit
单行文本框有输入密码时使用的掩码功能,自己制作工具APP用不到,就没写
2.1 方法列表
QLineEdit类 | 说明 |
---|---|
self=QLineEdit(text, parent) | 创建实例和文字text ->字符串,非必须parent ->父控件,使用布局时可省略 |
self.setText(text) | 设置控件文字text ->字符串 |
=self.text() | 读取控件文字,输出字符串 |
self.setAlignment() | 输入PyQt5.QtCore中常量Qt.AlignLeft :文字水平方向靠左对齐Qt.AlignRight :文字水平方向靠右对齐Qt.AlignCenter :文字水平方向居中对齐Qt.AlignJustify :文字水平方向调整间距两端对齐 |
self.setMaxLength(n) | 设置文本框所允许输入的最大字符数 |
self.setReadOnly(False) | 设置文本为只读 |
self.setValidator() | 输入PyQt5.QtGui中的类QIntValidator() :限制输入整数QDoubleValidator() :限制输入浮点数QRegexpValidator() :检查输入是否符合正则表达式 |
self.textChanged.connect(fun) | 修改文本内容时,触发槽函数 |
self.editingFinished.connect(fun) | 编辑文本结束时,触发槽函数 |
继承自QWidget类的方法 | |
x , y , width , height , ... | 几何类方法,详见窗口的几何数据 |
2.2 示例 单行文本框计算器
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('单行文本框')
glayout = QGridLayout()
self.setLayout(glayout)
self.line_edit1 = QLineEdit()
self.line_edit1.setAlignment(Qt.AlignRight)
self.line_edit1.setValidator(QIntValidator())
glayout.addWidget(self.line_edit1, 0, 0)
label1 = QLabel('+')
glayout.addWidget(label1, 0, 1)
self.line_edit2 = QLineEdit()
self.line_edit2.setAlignment(Qt.AlignRight)
self.line_edit2.setValidator(QIntValidator())
glayout.addWidget(self.line_edit2, 0, 2)
label2 = QLabel('=')
glayout.addWidget(label2, 0, 3)
self.line_edit3 = QLineEdit()
self.line_edit3.setAlignment(Qt.AlignRight)
self.line_edit3.setReadOnly(True)
glayout.addWidget(self.line_edit3, 0, 4)
btn = QPushButton('计算')
self.btn.clicked.connect(self.intCalculate)
glayout.addWidget(btn, 1, 2)
def intCalculate(self):
self.line_edit3.setText(str(int(self.line_edit1.text())+int(self.line_edit2.text())))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
3 富文本框 QTextEdit
QTextEdit 是一个所见即所得的富文本编辑框,支持输入文字段落,带修饰的超文本,图片,表格等文本类型
本文只关注纯文本类型数据
3.1 方法列表
QTextEdit类 | 说明 |
---|---|
self=QTextEdit(parent) | 创建实例和文字parent ->父控件,使用布局时可省略 |
self.setPlainText(text) | 设置多行文本框的内容text ->字符串 |
=self.toPlainText() | 返回多行文本框的文本内容,返回字符串 |
self.append(text) | 追加内容text ->字符串 |
self.clear() | 清除多行文本框的内容 |
self.setPlaceholderText(text) | 设置占位文本text ->字符串 |
=self.placeholderText() | 获取占位文本,返回字符串 |
继承自QWidget类的方法 | |
x , y , width , height , ... | 几何类方法,详见窗口的几何数据 |
3.2 示例 显式点击次数
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('第一个APP')
vlayout = QVBoxLayout()
self.setLayout(vlayout)
self.count = 0
self.text_edit = QTextEdit()
self.text_edit.setPlaceholderText('点击次数')
vlayout.addWidget(self.text_edit)
btn = QPushButton()
btn.setText('点击')
btn.clicked.connect(self.btnClicked)
vlayout.addWidget(btn)
def btnClicked(self):
self.count = self.count + 1
self.text_edit.append('点击了{0}次'.format(self.count))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
4 进度条 QProgressBar
4.1 方法列表 QProgressBar QTimer
QProgressBar类 | 说明 |
---|---|
self=QProgressBar(parent) | 创建实例parent ->父控件,使用布局时可省略 |
self.setRange(start, end) | 设置范围start , end ->数字 |
self.setValue(value) | 设置当前值 |
self.setFormat(text) | 设置文本 |
self.setOrientation() | 设置PyQt5.QtCore中的常数Qt.Horizontal : 水平方向Qt.Vertical : 竖直方向 |
继承自QWidget类的方法 | |
x , y , width , height , ... | 几何类方法,详见窗口的几何数据 |
QTimer类 | 说明 |
---|---|
self=QTimer() | 创建实例 |
self.start(period) | 开始计时,设置相应周期period ->ms |
=self.isActive() | 计时器是否激活,返回bool |
self.stop() | 停止计时器 |
4.2 实例 时间进度条
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
vlayout = QVBoxLayout()
self.pbar = QProgressBar()
vlayout.addWidget(self.pbar)
self.btn = QPushButton('开始')
self.btn.clicked.connect(self.onStart)
vlayout.addWidget(self.btn)
self.setLayout(vlayout)
self.timer = QTimer()
self.timer.timeout.connect(self.update_func)
self.step = 0
def update_func(self):
if self.step >= 100:
self.timer.stop()
return
self.step = self.step + 1
self.pbar.setValue(self.step)
def onStart(self):
if self.timer.isActive():
self.timer.stop()
self.btn.setText('Start')
else:
self.timer.start(100)
self.btn.setText('Stop')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())