QAbstractButton简介
QAbstractButton类为一个抽象类,不能实例化,必须有其他按钮类来继承它以实现不同的功能和表现形式。QPushButton, QCheckButton, QRadioButto,QToolButton等常见按钮都继承自QAbstractButton。
QAbstractButton提供一个按钮所需的最基本的状态和信号。
QAbstractButton常用方法:
- isEnable(); 按钮是否在使能状态, 提示按钮是否可以被用户点击;
- isChecked();按钮是否处于标记状态;
- isCheckAble(); 按钮是否可标记;
- isDown(); 按钮是否已经按下;
- setAutoRepeat(); 设置按钮是否在用户长按时可以自动重复执行。
QAbstractButton常用信号:
- pressed();鼠标左键在按钮上按下时触发该信号;
- released();鼠标左键释放时触发该信号;
- clicked(); 鼠标左键在按钮上按下然后释放,或快捷键被释放时触发该信号;
- toggled();按钮的标记状态发生改变时触发该信号。
QPushButton简介
QPushButton是PyQt中常用最常用的基本控件之一,按下(或者单击)一个QPushButton按钮给APP发送某个命令,让APP执行某个操作或者相应一些信息。一个PyQt 实现的APP中典型的按钮如确定,取消,关闭,是,否,帮助等等,一般都由QPushButton来实现。
QPushButton常用方法:
- setText();设置按钮的显示文本;
- setIcon();设置按钮上的图标;
- setEnabled();设置按钮是否可用,设置为False时,按钮不可用;
- setCheckable();设置按钮是否已经被选中,如果设置True,则表示按钮将保持已点击和释放状态;
- text();返回按钮的显示文本;
- toggle();在按钮状态之间进行切换;
- isChecked();返回按钮的选中状态。
QPushButton类继承关系:
测试QPushButton
qpushbutton.py演示了怎样使用QPushButton来控制播放一个GIF动画图片,基本功能包括:
- 播放/停止;
- 逐帧前进/后退;
- 到第一帧/最后一帧。
import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QPushButton, QStyle)
from PyQt5.QtGui import (QIcon, QMovie)
class DemoPushButton(QMainWindow):
def __init__(self, parent=None):
super(DemoPushButton, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle("实战PyQt5: QPushButton Demo!")
# 设置窗口大小
self.resize(400, 420)
# 图像尺寸
img_width = 176 * 2
img_height = 180 * 2
# 播放状态记录变量
self.is_playing = False
self.is_pause = False
self.total_frame = 0
self.cur_frame = 0
self.movie = QMovie(os.path.dirname(__file__) + "/use-python.gif")
self.movie.setScaledSize(QtCore.QSize(img_width, img_height))
self.movie.setCacheMode(QMovie.CacheAll) #支持回卷
self.total_frame = self.movie.frameCount() #保存总帧数
label = QLabel(self)
label.move(20, 10)
label.setFixedSize(img_width, img_height)
label.setMovie(self.movie)
self.movie.jumpToFrame(0)
self.btn_play = QPushButton(self)
self.btn_play.setGeometry(20, 380, 60, 24)
self.btn_play.clicked.connect(self.play)
self.setPlayButtonState()
btn_first = QPushButton(self)
btn_first.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSkipBackward))
btn_first.setText("到头")
btn_first.setToolTip("到第一帧")
btn_first.setGeometry(90, 380, 60, 24)
btn_first.clicked.connect(self.firstFrame)
btn_last = QPushButton(self)
btn_last.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSkipForward))
btn_last.setText("到尾")
btn_last.setToolTip("到最后一帧")
btn_last.setGeometry(160, 380, 60, 24)
btn_last.clicked.connect(self.lastFrame)
btn_prev = QPushButton(self)
btn_prev.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSeekBackward))
btn_prev.setText("前帧")
btn_prev.setToolTip("到前一帧")
btn_prev.setGeometry(230, 380, 60, 24)
btn_prev.clicked.connect(self.prevFrame)
btn_next = QPushButton(self)
btn_next.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSeekForward))
btn_next.setText("后帧")
btn_next.setToolTip("到后一帧")
btn_next.setGeometry(300, 380, 60, 24)
btn_next.clicked.connect(self.nextFrame)
#修改播放按钮的状态
def setPlayButtonState(self):
if self.is_playing :
self.btn_play.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaPlay))
self.btn_play.setText("停止")
self.btn_play.setToolTip("点击按钮停止播放")
else:
self.btn_play.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaStop))
self.btn_play.setText("播放")
self.btn_play.setToolTip("点击按钮开始播放")
#播放按钮的槽函数
def play(self):
if self.is_playing:
self.movie.stop()
self.movie.jumpToFrame(0) #回到第一帧
self.is_playing = False
else:
self.movie.start()
self.is_playing = True
self.setPlayButtonState()
#到设定的当前帧
def toFrame(self):
if self.is_playing:
self.movie.stop()
self.is_playing = False
self.setPlayButtonState()
self.movie.jumpToFrame(self.cur_frame)
#到第一帧
def firstFrame(self):
self.cur_frame = 0
self.toFrame()
#到最后一帧
def lastFrame(self):
self.cur_frame = self.total_frame - 1
self.toFrame()
#到前一帧
def prevFrame(self):
if self.cur_frame <= 0:
self.cur_frame = self.total_frame - 1
else:
self.cur_frame = self.cur_frame - 1
self.toFrame()
#到后一帧
def nextFrame(self):
if self.cur_frame >= self.total_frame - 1:
self.cur_frame = 0
else:
self.cur_frame = self.cur_frame + 1
self.toFrame()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoPushButton()
window.show()
sys.exit(app.exec())
运行结果如下图所示:
测试QPushButton
本文知识点
- 获得系统PyQt内置图标的方法;
- 使用PyQt内置图标为QPushButton按钮设置图标;
- 信号和槽函数的使用;
- QMovie对GIF动画播出的基本操作函数;
- QMovie支持回卷须设置setCacheMode(QMovie.CacheAll)。
前一篇: 实战PyQt5: 007-单行编辑控件QLineEdit