PyQt5案例汇总(完整版)
起步
PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。
Qt库是一套最有用的GUI库。
PyQt5是作为一套Python模块实现的。他已经超过620个类和6000个函数与方法。他是一个运行在所有主流操作系统上的多平台组件,包括Unix,Windows和Mac OS。
说明
下面小编就给大家提供一些简单的pyqt5的案例,如有需要拿走不谢!!!
本文转载from:PyQt5-Chinese-tutorial
菜单栏和工具栏
01窗口居中
# 导入需要的包和模块
import sys
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QDesktopWidget
# QDesktopWidget这个库提供了用户的桌面信息,包括屏幕的大小
from PyQt5.QtWidgets import QApplication
# 创建一个类
class Ex(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.resize(250,150)
self.center()
# 这个方法调用我们下面写的,实现对话框居中的方法
self.setWindowTitle('chuangkou要居中')
self.show()
def center(self):
qr = self.frameGeometry()
# 得到了主窗口大小
print('qr:',qr)
cp = QDesktopWidget().availableGeometry().center()
# 获取显示器的分辨率,然后得到中间点的位置
print('cp:',cp)
qr.moveCenter(cp)
# 然后把自己的窗口的中心点放到qr的中心点
self.move(qr.topLeft())
app = QApplication(sys.argv)
demo1 = Ex()
sys.exit(app.exec_())
02 状态栏
# 导入需要的包和模块
import sys
# from PyQt5.QtWidgets import QWidget
# from PyQt5.QtWidgets import QDesktopWidget
# QDesktopWidget这个库提供了用户的桌面信息,包括屏幕的大小
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMainWindow
class Ex(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 状态栏是由这个创建的
self.statusBar().showMessage('准备')
# 调用QtGui.QMainWindow 类的 statusBar()方法
#3 创建状态栏.第一次调用创建一个状态栏,返回一个状态栏对象.
#3 showMessage()方法在状态栏上显示一条信息
self.setGeometry(300,300,250,150)
self.setWindowTitle('标题还是要取的')
#显示
self.show()
app = QApplication(sys.argv)
demo1 = Ex()
sys.exit(app.exec_())
03菜单栏
import sys
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QAction
from PyQt5.QtWidgets import qApp
from PyQt5.QtGui import QIcon
class Ex(QMainWindow):
def __init__(self):
super(Ex, self).__init__()
self.initUI()
def initUI(self):
exitAct = QAction(QIcon("exit.png"),'&Exit',self)
print(exitAct)
exitAct.setShortcut("ctrl+q")
exitAct.setStatusTip('tuichu应用')
exitAct.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAct)
self.setGeometry(300,300,399,200)
self.setWindowTitle('决赛你电脑的')
self.show()
app = QApplication(sys.argv)
demo1 = Ex()
sys.exit(app.exec_())
04子菜单
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
menubar = self.menuBar()
fileMenu = menubar.addMenu('File')
impMenu = QMenu('Import', self)
impAct = QAction('Import mail', self)
impMenu.addAction(impAct)
newAct = QAction('New', self)
fileMenu.addAction(newAct)
fileMenu.addMenu(impMenu)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Submenu')
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
05 勾选菜单
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.statusbar = self.statusBar()
self.statusbar.showMessage('Ready')
menubar = self.menuBar()
viewMenu = menubar.addMenu('View')
# 本例创建了一个行为菜单。这个行为/动作能切换状态栏显示或者隐藏。
viewStatAct = QAction('View statusbar', self, checkable=True)
viewStatAct.setStatusTip('View statusbar') # 用checkable选项创建一个能选中的菜单。
viewStatAct.setChecked(True) # 默认设置为选中状态
viewStatAct.triggered.connect(self.toggleMenu)
viewMenu.addAction(viewStatAct)
# 依据选中状态切换状态栏的显示与否。
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Check menu')
self.show()
def toggleMenu(self, state):
if state:
self.statusbar.show()
else:
self.statusbar.hide()
app = QApplication(sys.argv)
demo1 = Example()
sys.exit(app.exec_())
06 右键菜单
import sys
from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Context menu')
self.show()
def contextMenuEvent(self, event):
cmenu = QMenu(self)
newAct = cmenu.addAction("New")
print(newAct)
opnAct = cmenu.addAction("Open")
print(opnAct)
quitAct = cmenu.addAction("Quit")
action = cmenu.exec_(self.mapToGlobal(event.pos()))
if action == quitAct:
qApp.quit()
elif action == opnAct:
print('打开就打开')
elif action == newAct:
print('新建就新建')
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
07工具栏
# 菜单栏包含了所有的命令,工具栏就是常用的命令的集合。
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
exitAct = QAction(QIcon('logo.png'), 'Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.triggered.connect(qApp.quit)
# 和上面的菜单栏差不多,这里使用了一个行为对象,
# 这个对象绑定了一个标签,一个图标和一个快捷键。
# 这些行为被触发的时候,会调用QtGui.QMainWindow的quit方法退出应用。
self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAct)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Toolbar')
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
# 上面的例子中,我们创建了一个工具栏这个工具栏只有一个退出应用的动作
08主窗口(啥都有的呢)
# 本模块的功能:<>
import sys
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QTextEdit
from PyQt5.QtWidgets import QAction
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
textEdit = QTextEdit()
self.setCentralWidget(textEdit)
exitAct = QAction(QIcon('logo.png'), '退退退', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('退出应用')
exitAct.triggered.connect(self.close)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('文件')
fileMenu.addAction(exitAct)
toolbar = self.addToolBar('退出')
toolbar.addAction(exitAct)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('代码编辑工具')
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
布局管理
09绝对定位的应用
import sys
from PyQt5.QtWidgets import QWidget, QLabel, QApplication
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)
lbl3 = QLabel('for programmers', self)
lbl3.move(55, 70)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Absolute')
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
# 绝对定位其实说白了就是使用相对于原点的像素来进行计算
10 盒子布局
import sys
from PyQt5.QtWidgets import (QWidget, QPushButton,
QHBoxLayout, QVBoxLayout, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
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)
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('Buttons')
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
11 栅格布局(表格)
import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout,
QPushButton, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
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)
self.move(300, 150)
self.setWindowTitle('Calculator')
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
12 制作提交反馈信息的布局
import sys
from PyQt5.QtWidgets import \
(QWidget, QLabel, QLineEdit, QTextEdit, QGridLayout, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
title = QLabel('Title')
author = QLabel('Author')
review = QLabel('Review')
titleEdit = QLineEdit()
authorEdit = QLineEdit()
reviewEdit = QTextEdit()
grid = QGridLayout()
grid.setSpacing(10)
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, 5, 1)
self.setLayout(grid)
self.setGeometry(300, 300, 350, 300)
self.setWindowTitle('Review')
self.show()
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
事件和信号
13 信号和槽机制
'''
事件
signals and slots 被其他人翻译成信号和槽机制,(⊙o⊙)…我这里还是不翻译好了。
所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,
比如网络的连接,窗口管理器或者定时器等。调用应用的exec_()方法时,应用会进入主循环,主循环会监听和分发事件。
在事件模型中,有三个角色:
事件源
事件
事件目标
事件源就是发生了状态改变的对象。事件是这个对象状态改变的内容。
事件目标是事件想作用的目标。事件源绑定事件处理函数,然后作用于事件目标身上。
PyQt5处理事件方面有个signal and slot机制。Signals and slots用于对象间的通讯。
事件触发的时候,发生一个signal,slot是用来被Python调用的
(相当于一个句柄?这个词也好恶心,就是相当于事件的绑定函数)slot只有在事件触发的时候才能调用。
'''
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import \
(QWidget, QLCDNumber, QSlider,
- 文章目录
- 繁