python GUI PyQt5小结

本文介绍如何使用PyQt5和pygame构建一个简单的音乐播放器。通过Qt Designer设计UI,并利用pygame播放和停止音乐文件。文章还展示了如何实现文件浏览、播放控制等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统:Linux Mint 18.3 xfce 64bit
需要软件:
(1)Qt5.9.1(使用其中的designer设计师软件来构建ui文件)
(2)pygame(播放音乐)
(3)python3(系统自带3.5版本)

上一篇记录了tkinter的基本控件使用,趁热打铁,把PyQt5的基本控件也学习了,下面的例子实现了和之前tkinter一样的简单音乐播放器。

(1)打开designer,如果是直接安装整个Qt程序的在安装目录下会找到该程序,如果是其他方式安装的,如apt、yum等包管理器安装的直接在命令行输入designer打开即可,拖动控件,使用到的控件有QLabel,QLineEdit,QPushButton ,构建如下的ui样式,里面红线是布局管理
这里写图片描述

注意ui中的三个按钮,将相应的对象名设置为btnBrowse、btnPlay、btnStop ,,后面代码会用到,其他几个控件对象名默认,同时也加上几个菜单,如代码中实现的退出程序
这里写图片描述

(2)保存文件,文件名自定,我的为musicplay.ui
(3)实例代码,实现的操作有
1)打开文件浏览器,选择具体格式的文件,返回文件名(含路径)
2)向QLineEdit 写入内容setText
3) 设置程序图标
4)显示控件提示setToolTip
5)显示状态提示setStatusTio
6) 显示消息对话框
7)使用pygame模块播放、停止mp3音乐
8)添加工具栏toolBar

代码如下

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Feb  8 17:23:32 2018

@author: 周文青

使用PyQt5构建简单GUI程序
"""

import sys
from PyQt5 import QtCore, QtGui, uic
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QMessageBox
from PyQt5.QtWidgets import QFileDialog, QAction, qApp
from PyQt5.QtGui import QIcon
import pygame

# 使用QtCreator建立的ui文件路径
qtCreatorFile = "/home/kindy/Files/python/gui/pyqt/musicplay.ui" 
# 使用uic加载
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

class MyApp(QMainWindow, Ui_MainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        super().__init__()
        self.initUI()       # 调用自定义的UI初始化函数initUI()

    def initUI(self):
        '''
        Initialize the window's UI
        '''
        self.setupUi(self)
        self.setWindowTitle("简单音乐播放器")
        self.setWindowIcon(QIcon("/home/kindy/Files/python/gui/pyqt/rocket.png"))   # 设置图标,linux下只有任务栏会显示图标

        self.initMenuBar()      # 初始化菜单栏
        self.initToolBar()      # 初始化工具栏
        self.initButton()       # 初始化按钮

        self.show()             # 显示

    def initMenuBar(self):
        '''
        初始化菜单栏
        '''
        self.actionExit.triggered.connect(qApp.quit)    # 按下菜单栏的Exit按钮会退出程序
        self.actionExit.setStatusTip("退出程序")         # 左下角状态提示
        self.actionExit.setShortcut('Ctrl+Q')           # 添加快捷键

    def initToolBar(self):
        '''
        初始化工具栏
        创建一个QAction实例exitAct,然后添加到designer已经创建的默认的工具栏toolBar里面
        '''
        exitAct = QAction(QIcon('/home/kindy/Files/python/gui/pyqt/exit.png'), 'Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.triggered.connect(qApp.quit)

        self.toolBar.addAction(exitAct)

    def initButton(self):
        '''
        Initialize the Buttons
        btnBrowse: browse the file explorer
        btnPlay: begin to play music using module pygame
        btnStop: stop playing music
        '''
        self.btnBrowse.clicked.connect(self.browserButton_callback) # 按下按钮调用回调函数
        self.btnBrowse.setToolTip("浏览音乐文件")                     # 设置提示
        #self.btnBrowse.setStyleSheet("{border-image: url(/home/kindy/Files/python/gui/pyq/play.ico);}") # 此代码没有效果
        self.btnPlay.clicked.connect(self.playButton_callback)      # 一旦按下按钮,连接槽函数进行处理
        self.btnPlay.setToolTip("播放音乐文件")
        self.btnStop.clicked.connect(self.stopButton_callback)
        self.btnStop.setToolTip("停止播放")

    def browserButton_callback(self):
        global fileName1    # 设置全局
        fileName1, filetype = QFileDialog.getOpenFileName(self,
                                    "选取文件",
                                    "/home/kindy/音乐",
                                    "All Files (*);;Music Files (*.mp3)")   #设置文件扩展名过滤,注意用双分号间隔
        self.lineEdit.setText(fileName1)

    def playButton_callback(self):
        '''
        播放音乐
        '''
        global fileName1
    #    playButton.configure(image=pause)
        pygame.mixer.init()
        pygame.mixer.music.load(fileName1)
        pygame.mixer.music.play()   # 播放音乐

    def stopButton_callback(self):
        '''
        停止播放
        '''
        pygame.mixer.music.stop()

    def closeEvent(self, event):

        reply = QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QMessageBox.Yes |
            QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    sys.exit(app.exec_())

效果如下:
这里写图片描述

参考链接:
(1)http://www.cnblogs.com/archisama/p/5444032.html
(2)http://zetcode.com/gui/pyqt5/menustoolbars/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值