安装
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_())