PyQt5 库:强大的 Python GUI 开发利器
off999 2025-05-08 04:41 25 浏览 0 评论
一、引言
在 Python 的众多应用领域中,图形用户界面(GUI)开发是一个重要的方面。PyQt5 库作为一个功能强大且广泛应用的 GUI 框架,为开发者提供了丰富的工具和组件,使得创建交互式、美观的应用程序变得更加便捷。无论是简单的桌面工具还是复杂的商业应用,PyQt5 都能发挥重要作用。本文将详细介绍 PyQt5 库的相关知识,并通过 5 个实例展示其实际应用。
二、PyQt5 库概述
PyQt5 是一套 Python 绑定的 Qt5 应用程序框架,它允许 Python 开发者使用 Qt 的强大功能来创建 GUI 应用程序。Qt 是一个跨平台的 C++ 框架,拥有丰富的类库和工具,用于开发各种类型的应用程序。PyQt5 将这些功能封装成 Python 可调用的形式,使得 Python 程序员能够轻松地进行 GUI 开发。
(一)安装 PyQt5
在使用 PyQt5 之前,需要先进行安装。可以通过 pip 命令来安装:
pip install PyQt5(二)基本概念
- 信号与槽
- 信号(Signal):是对象发出的事件通知。当一个对象的内部状态发生改变时,它可以发射一个信号。
- 槽(Slot):是一个可调用的函数,用于接收信号并进行相应的处理。连接信号与槽:通过 connect 方法将信号与槽连接起来,当信号发射时,与之连接的槽函数就会被调用。
2.窗口与组件
- QWidget:是所有用户界面类的基类,它提供了基本的窗口和组件功能。
- 常见的组件如 QLabel(标签)、QPushButton(按钮)、QLineEdit(文本输入框)、QComboBox(下拉列表框)等,它们都继承自 QWidget,可以在窗口中进行布局和交互。
(三)库函数示例
以下是一个简单的 PyQt5 程序示例,展示了一个窗口和一个按钮,点击按钮时会改变窗口的标题:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtCore import pyqtSlot
# 创建一个应用程序对象
app = QApplication(sys.argv)
# 创建一个窗口
window = QWidget()
# 创建一个按钮
button = QPushButton("点击我", window)
# 将按钮的点击信号与槽函数连接
button.clicked.connect(self.change_window_title)
# 定义槽函数,用于改变窗口标题
@pyqtSlot()
def change_window_title():
window.setWindowTitle("标题已改变")
# 显示窗口
window.show()
# 运行应用程序的主循环
sys.exit(app.exec_())在这个示例中:
- 首先导入了必要的模块,包括 QApplication(用于管理应用程序的生命周期)、QWidget(窗口基类)、QPushButton(按钮类)和 pyqtSlot(用于标记槽函数)。
- 创建了一个 QApplication 对象 app,它是应用程序的入口点。
- 创建了一个 QWidget 对象 window 作为窗口。
- 创建了一个 QPushButton 对象 button,并将其添加到窗口中。通过 clicked 信号与 change_window_title 槽函数连接,当按钮被点击时,槽函数会被调用。
- change_window_title 函数用于改变窗口的标题。
- 最后,显示窗口并运行应用程序的主循环,使应用程序持续运行并处理事件。
三、实例一:简单计算器
(一)功能需求
实现一个基本的四则运算计算器,能够进行加法、减法、乘法和除法运算,支持用户输入数字和运算符,点击 “=” 按钮计算结果并显示在界面上。
(二)代码实现
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QLabel, QLineEdit, QPushButton
from PyQt5.QtCore import Qt
class Calculator(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建网格布局
grid = QGridLayout()
# 显示结果的标签
self.result_label = QLabel("0", self)
self.result_label.setAlignment(Qt.AlignRight)
grid.addWidget(self.result_label, 0, 0, 1, 4)
# 数字按钮
buttons = [
('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
('0', 4, 0), ('.', 4, 1), ('=', 4, 2), ('+', 4, 3)
]
for button_text, row, col in buttons:
button = QPushButton(button_text, self)
grid.addWidget(button, row, col)
button.clicked.connect(self.button_clicked)
self.setLayout(grid)
self.setWindowTitle("简单计算器")
def button_clicked(self):
sender = self.sender()
button_text = sender.text()
if button_text == "=":
try:
expression = self.result_label.text()
result = eval(expression)
self.result_label.setText(str(result))
except Exception as e:
self.result_label.setText("错误: " + str(e))
else:
current_text = self.result_label.text()
if current_text == "0" and button_text not in ['.', '+', '-', '*', '/']:
self.result_label.setText(button_text)
else:
self.result_label.setText(current_text + button_text)
if __name__ == '__main__':
app = QApplication(sys.argv)
calculator = Calculator()
calculator.show()
sys.exit(app.exec_())
(三)代码注释
- 首先导入必要的模块,包括 QApplication、QWidget、QGridLayout(用于网格布局)、QLabel(用于显示结果)、QLineEdit(本示例中未使用,但可用于输入更复杂的表达式)、QPushButton 和 Qt(用于对齐方式等)。
- 定义 Calculator 类继承自 QWidget。initUI 方法用于初始化界面:创建一个 QGridLayout 对象 grid 用于布局组件。创建一个 QLabel 对象 result_label 用于显示计算结果,设置其初始值为 "0" 并右对齐,然后将其添加到网格布局的第一行,占据四列。定义一个按钮列表 buttons,包含数字和运算符以及它们在网格布局中的位置信息。遍历按钮列表,创建每个按钮 button,将其添加到网格布局中对应的位置,并连接其 clicked 信号到 button_clicked 槽函数。最后将网格布局设置为窗口的布局,并设置窗口标题。button_clicked 方法是槽函数,用于处理按钮点击事件:获取发送信号的按钮对象 sender,并获取其文本 button_text。如果点击的是 "=" 按钮,尝试使用 eval 函数计算当前显示在结果标签中的表达式,并将结果显示在标签中,如果出现错误则显示错误信息。如果点击的是其他按钮,根据当前结果标签的文本内容进行相应处理,如果当前是 "0" 且点击的不是特殊字符(如小数点、运算符等),则直接将按钮文本设置为结果标签的内容,否则将按钮文本追加到当前结果标签的文本后面。
- 在 if __name__ == '__main__': 条件下,创建应用程序对象 app,实例化 Calculator 类并显示窗口,然后运行应用程序的主循环。
四、实例二:待办事项列表
(一)功能需求
创建一个简单的待办事项列表应用程序,用户可以输入待办事项,点击 “添加” 按钮将其添加到列表中,完成事项后可以点击 “删除” 按钮将其从列表中移除。
(二)代码实现
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QListWidget, QLineEdit, QPushButton
class ToDoList(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 垂直布局
vbox = QVBoxLayout()
# 水平布局用于输入框和按钮
hbox = QHBoxLayout()
# 待办事项列表
self.todo_list = QListWidget()
# 输入框
self.entry = QLineEdit()
# 添加按钮
add_button = QPushButton("添加")
add_button.clicked.connect(self.add_item)
# 删除按钮
delete_button = QPushButton("删除")
delete_button.clicked.connect(self.delete_item)
# 将组件添加到水平布局
hbox.addWidget(self.entry)
hbox.addWidget(add_button)
hbox.addWidget(delete_button)
# 将水平布局和列表添加到垂直布局
vbox.addLayout(hbox)
vbox.addWidget(self.todo_list)
self.setLayout(vbox)
self.setWindowTitle("待办事项列表")
def add_item(self):
text = self.entry.text()
if text:
self.todo_list.addItem(text)
self.entry.clear()
def delete_item(self):
selected_items = self.todo_list.selectedItems()
for item in selected_items:
self.todo_list.takeItem(self.todo_list.row(item))
if __name__ == '__main__':
app = QApplication(sys.argv)
todo_app = ToDoList()
todo_app.show()
sys.exit(app.exec_())
(三)代码注释
- 导入必要的模块,包括 QApplication、QWidget、QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QListWidget(列表组件)、QLineEdit(输入框)和 QPushButton。
- 定义 ToDoList 类继承自 QWidget。initUI 方法初始化界面:创建一个 QVBoxLayout 对象 vbox 用于整体垂直布局。创建一个 QHBoxLayout 对象 hbox 用于输入框和按钮的水平布局。创建一个 QListWidget 对象 todo_list 用于显示待办事项列表。创建一个 QLineEdit 对象 entry 用于用户输入待办事项。创建 “添加” 按钮 add_button 并连接其 clicked 信号到 add_item 槽函数,创建 “删除” 按钮 delete_button 并连接其 clicked 信号到 delete_item 槽函数。将输入框、添加按钮和删除按钮添加到水平布局 hbox 中,然后将水平布局和待办事项列表添加到垂直布局 vbox 中,最后将垂直布局设置为窗口的布局,并设置窗口标题。add_item 方法是槽函数,用于添加待办事项:获取输入框中的文本 text,如果不为空,则将其添加到待办事项列表中,并清空输入框。delete_item 方法是槽函数,用于删除选中的待办事项:获取选中的事项 selected_items,遍历选中的事项,通过 takeItem 方法根据行号从列表中移除。
- 在主程序部分,创建应用程序对象 app,实例化 ToDoList 类并显示窗口,然后运行应用程序的主循环。
五、实例三:图像浏览器
(一)功能需求
实现一个简单的图像浏览器,能够显示指定文件夹中的图像文件列表,用户点击列表中的图像文件名时,在窗口中显示相应的图像。
(二)代码实现
import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QListWidget, QLabel, QPushButton
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
class ImageBrowser(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 垂直布局
vbox = QVBoxLayout()
# 图像列表
self.image_list = QListWidget()
self.image_list.itemClicked.connect(self.show_image)
# 显示图像的标签
self.image_label = QLabel()
self.image_label.setAlignment(Qt.AlignCenter)
# 上一张按钮
prev_button = QPushButton("上一张")
prev_button.clicked.connect(self.show_previous_image)
# 下一张按钮
next_button = QPushButton("下一张")
next_button.clicked.connect(self.show_next_image)
# 将组件添加到布局
vbox.addWidget(self.image_list)
vbox.addWidget(self.image_label)
vbox.addWidget(prev_button)
vbox.addWidget(next_button)
self.setLayout(vbox)
self.setWindowTitle("图像浏览器")
# 加载图像文件列表
self.load_image_files()
def load_image_files(self):
# 假设图像文件在当前目录的 "images" 文件夹中
image_folder = "images"
if os.path.exists(image_folder):
for file in os.listdir(image_folder):
if file.endswith(('.jpg', '.png', '.jpeg')):
self.image_list.addItem(file)
def show_image(self, item):
image_path = os.path.join("images", item.text())
pixmap = QPixmap(image_path)
self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), Qt.KeepAspectRatio))
def show_previous_image(self):
current_row = self.image_list.currentRow()
if current_row > 0:
self.image_list.setCurrentRow(current_row - 1)
self.show_image(self.image_list.currentItem())
def show_next_image(self):
current_row = self.image_list.currentRow()
if current_row < self.image_list.count() - 1:
self.image_list.setCurrentRow(current_row + 1)
self.show_image(self.image_list.currentItem())
if __name__ == '__main__':
app = QApplication(sys.argv)
browser = ImageBrowser()
browser.show()
sys.exit(app.exec_())
六、实例四:《功能丰富的 PyQt5 文本编辑器》
(一)功能需求
- 提供一个直观的用户界面,用于文本的输入、编辑和查看。
- 实现基本的文本编辑操作,包括输入文字、删除文字、选择文本、复制、粘贴、剪切等。
- 具备打开本地文本文件的功能,支持多种常见的文本文件格式(如 .txt、.md 等),并能正确显示文件内容。
- 能够将编辑后的文本保存到本地文件,保存时可选择保存路径和文件名。
- 提供一些常用的编辑功能快捷键,例如复制(Ctrl + C)、粘贴(Ctrl + V)、剪切(Ctrl + X)、保存(Ctrl + S)等,以提高用户编辑效率。
- 在界面上显示当前文件的路径和状态信息,例如是否已保存、是否有未保存的修改等。
(二)代码实现
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QMenuBar, QFileDialog, QStatusBar
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt, QObject, pyqtSignal
class TextEditor(QWidget):
# 定义信号,用于通知主窗口文本是否有修改
text_changed_signal = pyqtSignal(bool)
def __init__(self):
super().__init__()
self.initUI()
self.init_connections()
self.file_path = None
self.is_text_modified = False
def initUI(self):
# 垂直布局
vbox = QVBoxLayout()
# 文本编辑区
self.text_edit = QTextEdit()
self.text_edit.setAcceptRichText(False) # 不接受富文本格式,只处理纯文本
# 菜单栏
menu_bar = QMenuBar()
file_menu = menu_bar.addMenu("文件")
# 打开文件动作
open_action = file_menu.addAction("打开")
open_action.setIcon(QIcon("open_icon.png"))
open_action.triggered.connect(self.open_file)
# 保存文件动作
save_action = file_menu.addAction("保存")
save_action.setIcon(QIcon("save_icon.png"))
save_action.triggered.connect(self.save_file)
# 另存为文件动作
save_as_action = file_menu.addAction("另存为")
save_as_action.triggered.connect(self.save_file_as)
# 编辑菜单
edit_menu = menu_bar.addMenu("编辑")
# 复制动作
copy_action = edit_menu.addAction("复制")
copy_action.setShortcut(Qt.CTRL + Qt.Key_C)
copy_action.triggered.connect(self.text_edit.copy)
# 粘贴动作
paste_action = edit_menu.addAction("粘贴")
paste_action.setShortcut(Qt.CTRL + Qt.Key_V)
paste_action.triggered.connect(self.text_edit.paste)
# 剪切动作
cut_action = edit_menu.addAction("剪切")
cut_action.setShortcut(Qt.CTRL + Qt.Key_X)
cut_action.triggered.connect(self.text_edit.cut)
# 撤销动作
undo_action = edit_menu.addAction("撤销")
undo_action.setShortcut(Qt.CTRL + Qt.Key_Z)
undo_action.triggered.connect(self.text_edit.undo)
# 重做动作
redo_action = edit_menu.addAction("重做")
redo_action.setShortcut(Qt.CTRL + Qt.Key_Y)
redo_action.triggered.connect(self.text_edit.redo)
# 状态栏
self.status_bar = QStatusBar()
self.setStatusBar(self.status_bar)
# 将文本编辑区和菜单栏添加到布局
vbox.addWidget(menu_bar)
vbox.addWidget(self.text_edit)
self.setLayout(vbox)
self.setWindowTitle("文本编辑器")
def init_connections(self):
# 连接文本编辑区的信号与槽函数,用于检测文本是否修改
self.text_edit.textChanged.connect(self.text_changed)
def text_changed(self):
self.is_text_modified = True
self.update_status_bar()
self.text_changed_signal.emit(True)
def update_status_bar(self):
if self.file_path:
status_text = f"文件路径: {self.file_path} - 是否已保存: {'是' if not self.is_text_modified else '否'}"
else:
status_text = "未打开文件 - 是否已保存: {'是' if not self.is_text_modified else '否'}"
self.status_bar.showMessage(status_text)
def open_file(self):
file_name, _ = QFileDialog.getOpenFileName(self, "打开文件", "", "文本文件 (*.txt *.md);;所有文件 (*)")
if file_name:
self.file_path = file_name
with open(file_name, 'r', encoding='utf-8') as file:
self.text_edit.setPlainText(file.read())
self.is_text_modified = False
self.update_status_bar()
def save_file(self):
if self.file_path:
with open(self.file_path, 'w', encoding='utf-8') as file:
file.write(self.text_edit.toPlainText())
self.is_text_modified = False
self.update_status_bar()
else:
self.save_file_as()
def save_file_as(self):
file_name, _ = QFileDialog.getSaveFileName(self, "保存文件", "", "文本文件 (*.txt *.md);;所有文件 (*)")
if file_name:
self.file_path = file_name
with open(file_name, 'w', encoding='utf-8') as file:
file.write(self.text_edit.toPlainText())
self.is_text_modified = False
self.update_status_bar()
if __name__ == '__main__':
app = QApplication(sys.argv)
editor = TextEditor()
editor.show()
sys.exit(app.exec_())
七、实例五:登录界面
(一)功能需求
实现一个简单的登录界面,用户输入用户名和密码,点击 “登录” 按钮后,验证用户名和密码是否正确,如果正确则显示登录成功提示,否则显示错误提示。
(二)代码实现
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox
from PyQt5.QtCore import Qt
class LoginForm(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 垂直布局
vbox = QVBoxLayout()
# 用户名标签和输入框
username_label = QLabel("用户名:")
self.username_edit = QLineEdit()
# 密码标签和输入框
password_label = QLabel("密码:")
self.password_edit = QLineEdit()
self.password_edit.setEchoMode(QLineEdit.Password)
# 登录按钮
login_button = QPushButton("登录")
login_button.clicked.connect(self.login)
# 将组件添加到布局
vbox.addWidget(username_label)
vbox.addWidget(self.username_edit)
vbox.addWidget(password_label)
vbox.addWidget(self.password_edit)
vbox.addWidget(login_button)
self.setLayout(vbox)
self.setWindowTitle("登录界面")
def login(self):
username = self.username_edit.text()
password = self.password_edit.text()
# 这里假设正确的用户名和密码为 "admin" 和 "123456"
if username == "admin" and password == "123456":
QMessageBox.information(self, "登录成功", "欢迎登录!")
else:
QMessageBox.warning(self, "错误", "用户名或密码错误!")
if __name__ == '__main__':
app = QApplication(sys.argv)
login_form = LoginForm()
login_form.show()
sys.exit(app.exec_())
(三)代码注释
- 导入必要的模块,包括 QApplication、QWidget、QVBoxLayout、QLabel、QLineEdit(用于输入用户名和密码)、QPushButton(登录按钮)、QMessageBox(用于显示提示信息)和 Qt。
- 定义 LoginForm 类继承自 QWidget。initUI 方法初始化界面:创建一个 QVBoxLayout 对象 vbox 用于垂直布局。创建用户名标签 username_label 和输入框 username_edit。创建密码标签 password_label 和输入框 password_edit,并设置其显示模式为密码模式(输入内容显示为星号)。创建登录按钮 login_button,连接其 clicked 信号到 login 槽函数。将组件添加到垂直布局中,最后将布局设置为窗口的布局,并设置窗口标题。login 方法是槽函数,用于处理登录操作:获取用户输入的用户名 username 和密码 password。这里假设正确的用户名和密码为 "admin" 和 "123456",进行简单的验证。如果用户名和密码正确,使用 QMessageBox.information 显示登录成功提示;如果错误,使用 QMessageBox.warning 显示错误提示。
- 在主程序部分,创建应用程序对象 app,实例化 LoginForm 类并显示窗口,然后运行应用程序的主循环。
八、结束语
通过以上对 PyQt5 库的介绍以及五个实例的展示,我们可以看到 PyQt5 在 Python GUI 开发中的强大功能和灵活性。无论是简单的计算器、待办事项列表,还是较为复杂的图像浏览器、文本编辑器和登录界面,都可以通过 PyQt5 相对轻松地实现。
相关推荐
- win10版本回退(win10回退到以前版本)
-
如果你想在Windows10系统中回退到上一个版本,可以按照以下步骤进行操作:1.打开设置:点击Windows开始按钮,然后点击屏幕左侧的“设置”图标,或者使用键盘快捷键Win+I打开设置。2...
- 营业厅一个路由器多少钱(上门更换路由器收费吗)
-
移动免费装宽带活动全国都在搞,不过免费是有“门槛”的。以我所在的地区为例,只有月费在78元及以上的大流量套餐用户,才可以享受免费安装移动的宽带。月费越高,宽带的速率也越高,148元档可以安装200M的...
- win10从u盘启动怎么设置(win10怎么从u盘启动电脑)
-
1.回到桌面。点击开始徽标,点击开始菜单左侧的设置。2.设置界面点击更新和安全。3.进入更新和安全界面,点击左侧的恢复选项。4.进入恢复界面,点击高级启动下面的立即重新启动。5.插入自己的U盘,等待...
- 系统大全网站(系统大全网站推荐)
-
下载时发生错误可能是以下原因:1.你的网速过慢,网页代码没有完全下载就运行了,导致不完整,当然就错误了。请刷新。2.网页设计错误,导致部分代码不能执行。请下载最新的遨游浏览器。3.你的浏览器不兼容导致...
- win10官方启动盘(win10官方启动盘怎么用)
-
1、在开始菜单搜索“设置”,打开“设置”;2、点击“更新与安全”,在左侧菜单栏点击“恢复”;3、点击“启动项”,在弹出的窗口中会显示当前可以启动的项目,点击“编辑”;4、在打开的“编辑启动项”窗口中,...
- win10系统安装不了(win10 安装不了)
-
电脑装不上win10系统可能是因为以下几个原因导致的原因一:win10安装文件不对我们在安装win10之前,要确保下载到安装包真实可用的,否则安装肯定会有问题,建议下载安全可靠的安装包!原因二:系统文...
- 国内dns哪个最快(dns开启好还是关闭好)
-
移动dns设置首选114.114.114.114,它又好又快。首选DNS和备用DNS都是一种域名系统,这两种域名系统有着先后之分,如果在首选DNS正常的情况下,就用首选DNS地址。当首选DNS服务器出...
- winxp安装盘(winxp系统安装)
-
xp系统安装步骤如下1、将下载的xp系统iso压缩包文件下载到C盘之外的分区,比如下载到D盘,右键使用WinRAR等工具解压到当前文件夹或指定文件夹,不能解压到C盘和桌面,否则无法安装;?2、解压之后...
- 现在的win11稳定了吗(win11稳定嘛)
-
windows10更稳定,由于win11刚刚推出没多久,稳定差不够好,兼容性也有待提升,无论是应用还是游戏都会遇到不明程度的问题,因此,在日常的使用过程中,我们还是应当以稳定性为优先,选择win10是...
- xp安装包下载到手机(xp系统安装包)
-
手机是基于ARM架构的处理器,而WindowsXP是基于x86架构的操作系统,因此无法直接在手机上安装WindowsXP。除非您的手机是使用Intel处理器,但这种情况非常罕见。如果您需要在手机上...
- 如何查看硬盘序列号(windows如何查看硬盘序列号)
-
1.打开开始菜单栏,输入【cmd】点击【确定】;2.在命令窗口依次输入【diskpart】-【listdisk】-【selectdisk0】;3.选好要查看的硬盘后,接着输入【detaildi...
- 虚拟机安装win7教程(虚拟机安装win7教程图解)
-
1.首先,下载并安装虚拟机软件,如VMwareWorkstation、VirtualBox等。2.打开虚拟机软件,创建一个新的虚拟机。3.在创建虚拟机的过程中,选择安装Windows7专业版的IS...
- 系统脱敏法的操作程序如何
-
系统脱敏疗法(systematicdesensitization)又称交互抑制法,是由美国学者沃尔普创立和发展的。这种方法主要是诱导求治者缓慢地暴露出导致神经症焦虑、恐惧的情境,并通过心理的放松状态...
- 闪迪u盘低级格式化工具(闪迪u盘格式化分配单元大小)
-
闪迪U盘格式化后速度变慢的可能原因及解决方法如下:文件系统问题:格式化时选择的文件系统类型可能会影响U盘的性能。常见的文件系统类型包括FAT32、NTFS和exFAT等。如果文件系统类型不合适,可能会...
- psd文件下载(psd格式下载网站)
-
1、在photoshop中,不能通过置入的方法来加载PSD文件,因为,通过置入的方法加载PSD文件,它是以合并图层的方法把PSD文件加入,这样,就失去了PSD文件的所有图层信息。 2、在文档中想...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
