pushbutton[ pushbutton按下不彈起來]
- 编辑:5moban.com - 18QAbstractButton簡介
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⠳ysimport⠯sfrom⠐yQt5⠩mport⠑tCore,⠑tGui,⠑tWidgetsfrom⠐yQt5.QtWidgets⠩mport⠨QApplication,⠑MainWindow,⠑Label,⠑PushButton,⠑Style)from⠐yQt5.QtGui⠩mport⠨QIcon,⠑Movie)⠣lass⠄emoPushButton(QMainWindow):⠂ ⠂ ⠂ ⠂ def⠟_init__(self,⠰arent=None):⠂ ⠂ ⠂ ⠂ super(DemoPushButton,⠳elf).__init__(parent)⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ #⠨譧ꗥ㦨題⠂ ⠂ ⠂ ⠂ self.setWindowTitle("實戰PyQt5:⠑PushButton⠄emo!")⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ #⠨譧ꗥ㥤祰⠂ ⠂ ⠂ ⠂ self.resize(400,⠴20)⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ #⠥像尺寸⠂ ⠂ ⠂ ⠂ img_width⠽⠱76⠪⠲⠂ ⠂ ⠂ ⠂ img_height⠽⠱80⠪⠲⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ #⠦態記錄變量⠂ ⠂ ⠂ ⠂ self.is_playing⠽⠆alse⠂ ⠂ ⠂ ⠂ self.is_pause⠽⠆alse⠂ ⠂ ⠂ ⠂ self.total_frame⠽⠰⠂ ⠂ ⠂ ⠂ self.cur_frame⠽⠰⠂ ⠂ ⠂ ⠂ ⠳elf.movie⠽⠑Movie(os.path.dirname(__file__)⠫⠢/use-python.gif")⠂ ⠂ ⠂ ⠂ self.movie.setScaledSize(QtCore.QSize(img_width,⠩mg_height))⠂ ⠂ ⠂ ⠂ self.movie.setCacheMode(QMovie.CacheAll)⠂ ⠣支持回卷⠂ ⠂ ⠂ ⠂ self.total_frame⠽⠳elf.movie.frameCount()⠣保存總幀數⠂ ⠂ ⠂ ⠂ label⠽⠑Label(self)⠂ ⠂ ⠂ ⠂ label.move(20,⠱0)⠂ ⠂ ⠂ ⠂ label.setFixedSize(img_width,⠩mg_height)⠂ ⠂ ⠂ ⠂ label.setMovie(self.movie)⠂ ⠂ ⠂ ⠂ self.movie.jumpToFrame(0)⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.btn_play⠽⠑PushButton(self)⠂ ⠂ ⠂ ⠂ self.btn_play.setGeometry(20,⠳80,⠶0,⠲4)⠂ ⠂ ⠂ ⠂ self.btn_play.clicked.connect(self.play)⠂ ⠂ ⠂ ⠂ self.setPlayButtonState()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ btn_first⠽⠑PushButton(self)⠂ ⠂ ⠂ ⠂ btn_first.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSkipBackward))⠂ ⠂ ⠂ ⠂ btn_first.setText("到頭")⠂ ⠂ ⠂ ⠂ btn_first.setToolTip("到第一幀")⠂ ⠂ ⠂ ⠂ btn_first.setGeometry(90,⠳80,⠶0,⠲4)⠂ ⠂ ⠂ ⠂ btn_first.clicked.connect(self.firstFrame)⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ btn_last⠽⠑PushButton(self)⠂ ⠂ ⠂ ⠂ btn_last.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSkipForward))⠂ ⠂ ⠂ ⠂ btn_last.setText("到尾")⠂ ⠂ ⠂ ⠂ btn_last.setToolTip("到最後一幀")⠂ ⠂ ⠂ ⠂ btn_last.setGeometry(160,⠳80,⠶0,⠲4)⠂ ⠂ ⠂ ⠂ btn_last.clicked.connect(self.lastFrame)⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ btn_prev⠽⠑PushButton(self)⠂ ⠂ ⠂ ⠂ btn_prev.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSeekBackward))⠂ ⠂ ⠂ ⠂ btn_prev.setText("前幀")⠂ ⠂ ⠂ ⠂ btn_prev.setToolTip("到前一幀")⠂ ⠂ ⠂ ⠂ btn_prev.setGeometry(230,⠳80,⠶0,⠲4)⠂ ⠂ ⠂ ⠂ btn_prev.clicked.connect(self.prevFrame)⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ btn_next⠽⠑PushButton(self)⠂ ⠂ ⠂ ⠂ btn_next.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaSeekForward))⠂ ⠂ ⠂ ⠂ btn_next.setText("後幀")⠂ ⠂ ⠂ ⠂ btn_next.setToolTip("到後一幀")⠂ ⠂ ⠂ ⠂ btn_next.setGeometry(300,⠳80,⠶0,⠲4)⠂ ⠂ ⠂ ⠂ btn_next.clicked.connect(self.nextFrame)⠂ ⠂ ⠣修改播放按鈕的狀態⠂ ⠂ def⠳etPlayButtonState(self):⠂ ⠂ ⠂ ⠂ if⠳elf.is_playing⠺⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.btn_play.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaPlay))⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.btn_play.setText("停止")⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠳elf.btn_play.setToolTip("點擊按鈕停止播放")⠂ ⠂ ⠂ ⠂ ⠂ else:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.btn_play.setIcon(QApplication.style().standardIcon(QStyle.SP_MediaStop))⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.btn_play.setText("播放")⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.btn_play.setToolTip("點擊按鈕開始播放")⠂ ⠂ ⠣播放按鈕的槽函數⠂ ⠂ def⠰lay(self):⠂ ⠂ ⠂ ⠂ if⠳elf.is_playing:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.movie.stop()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.movie.jumpToFrame(0)⠣回到第一幀⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.is_playing⠽⠆alse⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠥lse:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.movie.start()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.is_playing⠽⠔rue⠂ ⠂ ⠂ ⠂ self.setPlayButtonState()⠂ ⠂ ⠂ ⠂ #到設定的當前幀⠂ ⠂ ⠂ ⠂ def⠴oFrame(self):⠂ ⠂ ⠂ ⠂ if⠳elf.is_playing:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.movie.stop()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.is_playing⠽⠆alse⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.setPlayButtonState()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠳elf.movie.jumpToFrame(self.cur_frame)⠂ ⠂ ⠂ ⠂ ⠂ ⠣到第一幀⠂ ⠂ def⠦irstFrame(self):⠂ ⠂ ⠂ ⠂ self.cur_frame⠽⠰⠂ ⠂ ⠂ ⠂ self.toFrame()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ ⠂ #到最後一幀⠂ ⠂ def⠬astFrame(self):⠂ ⠂ ⠂ ⠂ self.cur_frame⠽⠳elf.total_frame⠭⠱⠂ ⠂ ⠂ ⠂ self.toFrame()⠂ ⠂ ⠂ ⠂ #到前一幀⠂ ⠂ def⠰revFrame(self):⠂ ⠂ ⠂ ⠂ if⠳elf.cur_frame⠼=⠰:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.cur_frame⠽⠳elf.total_frame⠭⠱⠂ ⠂ ⠂ ⠂ else:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.cur_frame⠽⠳elf.cur_frame⠭⠱⠂ ⠂ ⠂ ⠂ self.toFrame()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ #到後一幀⠂ ⠂ def⠮extFrame(self):⠂ ⠂ ⠂ ⠂ if⠳elf.cur_frame⠾=⠳elf.total_frame⠭⠱:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.cur_frame⠽⠰⠂ ⠂ ⠂ ⠂ else:⠂ ⠂ ⠂ ⠂ ⠂ ⠂ self.cur_frame⠽⠳elf.cur_frame⠫⠱⠂ ⠂ ⠂ ⠂ self.toFrame()⠂ ⠂ ⠂ ⠂ ⠂ ⠂ if⠟_name__⠽=⠦#39;__main__':⠂ ⠂ app⠽⠑Application(sys.argv)⠂ ⠂ window⠽⠄emoPushButton()⠂ ⠂ window.show()⠂ ⠂ sys.exit(app.exec())
運行結果如下圖所示:
測試QPushButton
本文知識點
獲得係統PyQt內置圖標的方法;
使用PyQt內置圖標為QPushButton按鈕設置圖標;
信號和槽函數的使用;
QMovie對GIF動畫播出的基本操作函數;
QMovie支持回卷須設置setCacheMode(QMovie.CacheAll)。
喜歡本文內容就收藏,點讚,評論,關注和轉發。