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动画图片,基本功能包括:
- 播放/停止;
- 逐帧前进/后退;
- 到第一帧/最后一帧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 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