下面是使用PyQt5实现图片查看器的完整攻略:
1. 准备工作
在开始编写代码之前,需要安装PyQt5和Pillow模块。PyQt5是一个Python GUI库,它提供了丰富的UI控件和工具类,可以帮助我们快速构建界面;Pillow是一个Python Imaging Library,在这里它用于读取和处理图片文件。
你可以使用以下命令来安装这两个模块:
pip install PyQt5 pillow
接下来,我们来创建一个PyQt5的窗口。在控制台输入以下命令:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('图片查看器')
window.show()
sys.exit(app.exec_())
运行之后,你应该会看到一个空的窗口。接下来,我们需要往窗口中添加一些控件,以便用户可以选择图片和浏览图片。
2. 添加控件
首先,我们添加一个按钮,用于打开文件选择窗口并选择图片。在窗口创建代码后添加以下代码:
from PyQt5.QtWidgets import QPushButton, QFileDialog
class ImageViewer(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('图片查看器')
self.button = QPushButton('选择图片', self)
self.button.move(20, 20)
self.button.clicked.connect(self.select_image)
def select_image(self):
options = QFileDialog.Options()
filename, _ = QFileDialog.getOpenFileName(self, '选择图片', '',\
'Image Files (*.png *.jpg *.bmp);;All Files (*)', options=options)
if filename:
print(filename)
app = QApplication(sys.argv)
window = ImageViewer()
window.show()
sys.exit(app.exec_())
这里我们创建了一个按钮,并将它放在窗口左上角,用户可以点击这个按钮以打开文件选择窗口。我们定义了一个select_image()
方法,并将这个方法与按钮的clicked信号连接,用于在用户选择完成图片后进行一些处理。
在select_image()
方法中,我们使用QFileDialog
类并调用getOpenFileName()
方法,创建一个文件选择窗口。用户可以在这个窗口中选择图片,选中的文件名将会返回给我们。
接下来,我们为窗口添加一个QLabel控件,用于显示选中的图片。我们还需要调用Pillow库中的Image
类,对选中的图片进行处理。在select_image()
方法中添加以下代码:
from PyQt5.QtWidgets import QLabel
from PIL import Image, ImageQt
class ImageViewer(QWidget):
# ...
def select_image(self):
options = QFileDialog.Options()
filename, _ = QFileDialog.getOpenFileName(self, '选择图片', '',\
'Image Files (*.png *.jpg *.bmp);;All Files (*)', options=options)
if filename:
image = Image.open(filename)
image = image.convert('RGBA')
qimage = ImageQt.ImageQt(image)
self.image_label.setPixmap(QPixmap.fromImage(qimage))
def setup_ui(self):
self.image_label = QLabel(self)
self.image_label.move(20, 60)
self.image_label.resize(400, 400)
我们首先导入QLabel和ImageQt类。在select_image()
方法中,我们使用Pillow的Image
类打开选中的图片,并进行了RGBA颜色空间转换。接着,我们使用ImageQt
类将图片转换为Qt中的QImage对象,最后,我们将QImage对象放在窗口中的QLabel控件中,用于显示图片。
在setup_ui()
方法中,我们创建了一个QLabel控件,并将它放在窗口的左上方,用于显示图片。现在,我们的图片查看器已经完成了!你可以运行这个程序,看看效果,它应该可以正确地选择图片并将图片显示在窗口中。
3. 示例说明
示例1:添加菜单栏
为了使得程序更加完善,我们可以添加菜单栏,用于对图片进行操作。以下是一个添加菜单栏的示例代码:
from PyQt5.QtWidgets import QMenuBar, QMenu, QAction
class ImageViewer(QWidget):
# ...
def setup_ui(self):
# ...
menubar = QMenuBar(self)
file_menu = QMenu('文件', self)
menubar.addMenu(file_menu)
open_action = QAction('打开', self)
open_action.triggered.connect(self.select_image)
file_menu.addAction(open_action)
exit_action = QAction('退出', self)
exit_action.triggered.connect(self.close)
file_menu.addAction(exit_action)
app = QApplication(sys.argv)
window = ImageViewer()
window.show()
sys.exit(app.exec_())
我们添加了一个名为setup_ui()
的方法,并在其中创建了一个QMenuBar控件,并添加了一个QMenu控件到菜单栏中。在该QMenu控件中,我们分别添加了“打开”和“退出”两个QAction控件,当用户点击这些控件时,我们会分别调用select_image()
和close()
方法,用于打开文件选择窗口和退出应用程序。
运行这个程序,你应该可以看到一个菜单栏被添加到了窗口中,并且菜单栏中包含两个选项:打开和退出。
示例2:缩放图片大小
有时候,我们的图片可能会很大,超过了窗口的大小。因此,我们可以添加一个缩放图片的功能,以便用户可以将图片调整到合适的大小。以下是一个添加缩放图片功能的示例代码:
class ImageViewer(QWidget):
# ...
def setup_ui(self):
# ...
self.image_scale = 1.0
zoomin_action = QAction('放大', self)
zoomin_action.triggered.connect(self.zoom_in)
file_menu.addAction(zoomin_action)
zoomout_action = QAction('缩小', self)
zoomout_action.triggered.connect(self.zoom_out)
file_menu.addAction(zoomout_action)
def zoom_in(self):
self.image_scale += 0.1
self.show_image()
def zoom_out(self):
self.image_scale -= 0.1
self.show_image()
def show_image(self):
image = Image.open(self.filename)
image = image.convert('RGBA')
width, height = int(image.width * self.image_scale), int(image.height * self.image_scale)
image = image.resize((width, height))
qimage = ImageQt.ImageQt(image)
self.image_label.setPixmap(QPixmap.fromImage(qimage))
self.resize(width + 40, height + 80)
def select_image(self):
# ...
self.show_image()
我们添加了一个名为zoom_in()
和zoom_out()
的方法,并分别将它们与菜单栏中的“放大”和“缩小”QAction控件相连接。接着,我们定义了一个名为show_image()
的方法,用于在用户选择图片后显示图片。在该方法中,我们调用了Pillow的Image
类并调用resize()
方法,将图片的大小缩放到我们期望的大小,并通过setPixmap()
方法将QPixmap对象放到窗口中的QLabel控件中。
在select_image()
方法中,我们最后调用了show_image()
方法,以便在用户选择图片后立即显示它。
运行这个程序,你可以尝试点击菜单栏中的“放大”和“缩小”选项,看看图片的大小是否会随之改变。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用PyQt5实现图片查看器的示例代码 - Python技术站