【代码】PyQt5,吊打tkinter

安装
PyQt5环境安装

学习
PyQt5教程
PyQt5 中文教程

美化
Python GUI教程(十六):在PyQt5中美化和装扮图形界面
如何使用pyQT做pythonGUI界面?
RGB颜色查询

其他
pygame学习笔记(4):声音控制
网易云网页版提取带有时间轴的歌词
下面这个音源,在pygame下播放变慢
网易云音乐破解—骄傲突破天际,骄傲冲出地球

用PyQt5写的第一个程序

import sys

from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton, QApplication, QMessageBox, QDesktopWidget)
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication


class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        QToolTip.setFont(QFont('SansSerif', 10)) # 提示框字体
        self.setToolTip('IS QWidget widget') # 创建提示框
        b = QPushButton('button',self) # 创建按钮
        b.setToolTip('is QWidget widget') # 创建按钮的提示框
        b.resize(b.sizeHint()) # 使用推荐的大小
        b.move(50,50)

        # 退出按钮
        qbtn = QPushButton('Quit', self)
        qbtn.clicked.connect(QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(400, 50)

        # 主窗口
        self.center()  # 或自定义 self.setGeometry(1000,500, 500, 400)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('./img/title.ico'))
        self.show()

    def center(self):
        qr = self.frameGeometry()  # 主窗口矩形
        cp = QDesktopWidget().availableGeometry().center()  # 显示器绝对值,屏幕中心点
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def closeEvent(self, event):    # 重写点X关闭的方法
        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)
    ex = Example()
    sys.exit(app.exec_())

PyQt5中的菜单和工具栏

import sys

from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QTextEdit
from PyQt5.QtGui import QIcon


class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 文本编辑框组件,作为中心组件,占据了所有剩下的空间。
        textEdit = QTextEdit()
        self.setCentralWidget(textEdit)
        # 用于菜单栏、工具栏或自定义快捷键的抽象动作行为,的按钮
        exitAction = QAction(QIcon('./img/ins.gif'), '&退出', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('退出应用')  
        exitAction.triggered.connect(self.close)  # qApp.quit()  
        # 状态栏
        self.statusBar()  #.showMessage('running..')
        # 菜单栏
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&文件')
        fileMenu.addAction(exitAction)
        # 工具栏
        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAction)
        # 窗口
        self.setGeometry(1000,500, 500, 400)
        self.setWindowIcon(QIcon('./img/title.ico'))
        self.setWindowTitle('player...')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

PyQt5中的布局管理

import sys

from PyQt5.QtWidgets import QGridLayout, QWidget, QLabel, QApplication, QPushButton, \
                            QHBoxLayout, QVBoxLayout, QLineEdit, QTextEdit
from PyQt5.QtGui import QIcon


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # # 绝对定位
        # lbl1 = QLabel('Zetcode', self)
        # lbl1.move(15, 10)
        #
        # lbl2 = QLabel('tutorials', self)
        # lbl2.move(35, 40)

        # # 箱布局
        # okButton = QPushButton("OK")
        # cancelButton = QPushButton("Cancel")
        #
        # hbox = QHBoxLayout()
        # hbox.addStretch(1)
        # hbox.addWidget(okButton)
        # hbox.addWidget(cancelButton)
        #
        # vbox = QVBoxLayout()
        # vbox.addStretch(1)        #
        # # 把水平布局放置在垂直布局内,设置一下窗口的主布局
        # vbox.addLayout(hbox)
        # self.setLayout(vbox)

        # 实例化QGridLayout类,并且把当前类设为应用窗口的布局。
        # 但是都是右下角,很纳闷


        # # 网格布局
        # grid = QGridLayout()
        # self.setLayout(grid)
        # names = ['Cls', 'Bck', '', 'Close',
        #          '7', '8', '9', '/',
        #          '4', '5', '6', '*',
        #          '1', '2', '3', '-',
        #          '0', '.', '=', '+']
        #
        # positions = [(i, j) for i in range(5) for j in range(4)]
        #
        # for position, name in zip(positions, names):
        #
        #     if name == '':
        #         continue
        #     button = QPushButton(name)
        #     grid.addWidget(button, *position,1,1) # 位置和占据大小
        #
        # 文本审阅窗口示例

        # 三个标签, 两个单行编辑框和一个文本编辑框组件的窗口
        title = QLabel('Title')
        author = QLabel('Author')
        review = QLabel('Review')
        titleEdit = QLineEdit()
        authorEdit = QLineEdit()
        reviewEdit = QTextEdit()

        grid = QGridLayout()
        grid.setSpacing(50)  # 组件之间的间距。

        grid.addWidget(title, 1, 0)
        grid.addWidget(titleEdit, 1, 1)

        grid.addWidget(author, 2, 0)
        grid.addWidget(authorEdit, 2, 1)

        grid.addWidget(review, 3, 0)
        grid.addWidget(reviewEdit, 3, 1, 1, 1)

        self.setLayout(grid)

        # 窗口
        self.setGeometry(300, 300, 750, 600)
        self.setWindowTitle('my player')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

PyQt5中的事件和信号

import sys
from PyQt5.QtCore import Qt, QObject, pyqtSignal
from PyQt5.QtWidgets import (QWidget,QMainWindow, QLCDNumber, QSlider, QPushButton,
                             QVBoxLayout, QApplication)


class Example12(QMainWindow):  # QWidget

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        # 信号 & 槽
        lcd = QLCDNumber(self)  # 数字显示(槽)
        sld = QSlider(Qt.Horizontal, self)  # 滑块条的把手(信号)

        vbox = QVBoxLayout()
        vbox.addWidget(lcd)
        vbox.addWidget(sld)

        self.setLayout(vbox)
        sld.valueChanged.connect(lcd.display)

        # sender()知道哪个组件是信号发送者。
        btn1 = QPushButton("Button 1", self)
        btn1.move(30, 50)

        btn2 = QPushButton("Button 2", self)
        btn2.move(150, 50)
        # 两个按钮都连接到了同一个槽中
        btn1.clicked.connect(self.buttonClicked)
        btn2.clicked.connect(self.buttonClicked)

        self.statusBar()

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Signal & slot')
        self.show()

    # 重写事件处理函数,点击q,应用将会被终止
    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Q:
            self.close()

    def buttonClicked(self):
        sender = self.sender()
        # print(sender.text()) # 在应用的状态栏上显示被按下的按钮的标签内容
        self.statusBar().showMessage(sender.text() + ' was pressed')


# 创建一个新的信号叫做closeApp, 并且成为外部类Communicate类的属性
class Communicate(QObject):
    closeApp = pyqtSignal()


class Example3(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.c = Communicate()
        self.c.closeApp.connect(self.close)  # 把自定义的closeApp信号连接到QMainWindow的close()槽上。

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Emit signal')
        self.show()

    def mousePressEvent(self, event):
        self.c.closeApp.emit()  # 当我们在窗口上点击一下鼠标,closeApp信号会被发射。应用中断。


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # ex = Example12()
    ex = Example3()
    sys.exit(app.exec_())

你可能感兴趣的:(【代码】PyQt5,吊打tkinter)