鱼C论坛

 找回密码
 立即注册
查看: 4047|回复: 7

[已解决]求教如何再pyside6中展示图片?

[复制链接]
发表于 2023-3-24 20:17:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求教如何再pyside6中展示图片?
隐藏展示图片的主界面外框。
图片展示持续指定时间后,消失。
求大神给出思路和方案。
最佳答案
2023-3-24 21:25:39
子飞鱼 发表于 2023-3-24 21:05
大神你好,问题基本解决。但还想再追问一下,如果图片小时候,我还需要继续展示其他的程序界面怎么办?
...

为了实现这个功能,你可以将上面提供的 ImageViewer 类作为一个启动画面使用,并在启动画面关闭后显示你的主程序界面。以下是一个简单的示例:

首先,我们需要创建一个新的主窗口类,用于显示你的程序的主要界面。在本例中,我们将使用一个简单的 QMainWindow,但你可以根据需要自定义这个类:

  1. from PySide6.QtWidgets import QMainWindow

  2. class MainWindow(QMainWindow):
  3.     def __init__(self, parent=None):
  4.         super(MainWindow, self).__init__(parent)
  5.         self.setWindowTitle('主程序界面')
  6.         # 在这里添加其他界面组件和布局
复制代码


然后,我们需要修改 ImageViewer 类,使其在关闭时发出一个信号。这可以通过在类中添加一个自定义信号并在 closeEvent 方法中发出它来实现:

  1. from PySide6.QtCore import Signal

  2. class ImageViewer(QMainWindow):
  3.     # 定义一个自定义信号,当启动画面关闭时发出
  4.     closed = Signal()

  5.     ...

  6.     def closeEvent(self, event):
  7.         # 当窗口关闭时发出信号
  8.         self.closed.emit()
  9.         super(ImageViewer, self).closeEvent(event)
复制代码


最后,修改主程序入口,首先显示启动画面,然后在启动画面关闭后显示主程序界面:

  1. if __name__ == '__main__':
  2.     app = QApplication(sys.argv)

  3.     image_path = 'path/to/your/image.png'  # 请将此处替换为你的图片路径
  4.     display_time_ms = 5000  # 显示图片的时间,单位为毫秒

  5.     viewer = ImageViewer(image_path, display_time_ms)
  6.     main_window = MainWindow()

  7.     def show_main_window():
  8.         main_window.show()
  9.         viewer.deleteLater()

  10.     viewer.closed.connect(show_main_window)
  11.     viewer.show()

  12.     sys.exit(app.exec())
复制代码


这样,在启动画面显示指定时间后关闭时,主程序界面将显示出来。

注意:在这个示例中,我们使用了 deleteLater 方法来在启动画面关闭后释放它占用的资源。这样做是因为我们在启动画面关闭后不再需要它。如果你希望在程序运行期间重复使用启动画面,你可以选择不使用 deleteLater 方法。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-24 20:27:47 | 显示全部楼层
在 PySide6(Qt for Python)中展示图片,可以使用 QLabel 控件和 QPixmap 类来实现。你可以创建一个自定义的窗口,设置透明度,然后在指定时间后关闭窗口。这里是一个简单的实现方案:

首先,请确保已经安装了 PySide6:

  1. pip install pyside6
复制代码

然后,创建一个名为 image_viewer.py 的文件,并添加以下代码:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QPixmap
  4. from PySide6.QtWidgets import QApplication, QLabel, QMainWindow


  5. class ImageViewer(QMainWindow):
  6.     def __init__(self, image_path, display_time_ms, parent=None):
  7.         super(ImageViewer, self).__init__(parent)

  8.         self.image_label = QLabel(self)
  9.         self.setCentralWidget(self.image_label)
  10.         self.display_image(image_path)

  11.         # 设置窗口无边框,背景透明
  12.         self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
  13.         self.setAttribute(Qt.WA_TranslucentBackground)

  14.         # 设置图片显示持续时间
  15.         QTimer.singleShot(display_time_ms, self.close)

  16.     def display_image(self, image_path):
  17.         pixmap = QPixmap(image_path)
  18.         self.image_label.setPixmap(pixmap)
  19.         self.image_label.setScaledContents(True)
  20.         self.resize(pixmap.size())


  21. if __name__ == '__main__':
  22.     app = QApplication(sys.argv)

  23.     image_path = 'path/to/your/image.png'  # 请将此处替换为你的图片路径
  24.     display_time_ms = 5000  # 显示图片的时间,单位为毫秒

  25.     viewer = ImageViewer(image_path, display_time_ms)
  26.     viewer.show()

  27.     sys.exit(app.exec())
复制代码

将 path/to/your/image.png 替换为你要显示的图片的路径,并设置 display_time_ms 为你想要显示的时间(单位为毫秒)。

运行上面的代码,你会看到一个无边框窗口显示图片,持续指定的时间后消失。为了运行代码,可以在命令行中执行:

  1. python image_viewer.py
复制代码

这个方案应该可以满足你的需求。请尝试修改代码以满足其他特定需求。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-24 20:28:28 | 显示全部楼层
展示图片可以使用QLabel控件,并设置其背景图片。隐藏外框可以使用setFrameShape方法将边框设置为无边框。展示图片持续指定时间后消失可以使用QTimer控件,设置定时器时间后,在定时器时间到达时隐藏图片。
以下是示例代码:
  1. import sys
  2. from PySide6.QtCore import QTimer
  3. from PySide6.QtGui import QPixmap
  4. from PySide6.QtWidgets import QApplication, QLabel, QMainWindow
  5. class ImageWindow(QMainWindow):
  6.     def __init__(self, image_path, duration=5000):
  7.         super().__init__()
  8.         self.image_path = image_path
  9.         self.duration = duration
  10.         self.initUI()
  11.    
  12.     def initUI(self):
  13.         # 创建QLabel控件,并设置背景图片
  14.         label = QLabel(self)
  15.         pixmap = QPixmap(self.image_path)
  16.         label.setPixmap(pixmap)
  17.         # 隐藏外框
  18.         label.setFrameShape(QLabel.NoFrame)
  19.         # 调整窗口大小为图片大小
  20.         self.resize(pixmap.width(), pixmap.height())
  21.         # 创建定时器,持续指定时间后隐藏图片
  22.         timer = QTimer(self)
  23.         timer.setSingleShot(True)
  24.         timer.timeout.connect(label.hide)
  25.         timer.start(self.duration)
  26. if __name__ == '__main__':
  27.     app = QApplication(sys.argv)
  28.     window = ImageWindow('image.jpg', 5000)
  29.     window.show()
  30.     sys.exit(app.exec())
复制代码

在上述代码中,ImageWindow类为展示图片的主窗口,其初始化方法中创建了一个QLabel控件,并设置其背景图片、隐藏外框和调整窗口大小。同时创建了一个定时器,持续指定时间后隐藏图片。在main函数中创建ImageWindow实例并显示窗口。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-24 21:05:46 | 显示全部楼层
isdkz 发表于 2023-3-24 20:27
在 PySide6(Qt for Python)中展示图片,可以使用 QLabel 控件和 QPixmap 类来实现。你可以创建一个自定义 ...

大神你好,问题基本解决。但还想再追问一下,如果图片小时候,我还需要继续展示其他的程序界面怎么办?
就像用pycharm程序,打开后显示弹出一个prcharm的图片,显示几秒后消失,出现了程序的主界面。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-24 21:08:21 | 显示全部楼层
isdkz 发表于 2023-3-24 20:27
在 PySide6(Qt for Python)中展示图片,可以使用 QLabel 控件和 QPixmap 类来实现。你可以创建一个自定义 ...

我的想法是再定义两个界面的类,第一个类用你刚才发的代码实现展示图片和指定时间消失。
但是怎么自动运行到第二个界面的类?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-24 21:25:39 | 显示全部楼层    本楼为最佳答案   
子飞鱼 发表于 2023-3-24 21:05
大神你好,问题基本解决。但还想再追问一下,如果图片小时候,我还需要继续展示其他的程序界面怎么办?
...

为了实现这个功能,你可以将上面提供的 ImageViewer 类作为一个启动画面使用,并在启动画面关闭后显示你的主程序界面。以下是一个简单的示例:

首先,我们需要创建一个新的主窗口类,用于显示你的程序的主要界面。在本例中,我们将使用一个简单的 QMainWindow,但你可以根据需要自定义这个类:

  1. from PySide6.QtWidgets import QMainWindow

  2. class MainWindow(QMainWindow):
  3.     def __init__(self, parent=None):
  4.         super(MainWindow, self).__init__(parent)
  5.         self.setWindowTitle('主程序界面')
  6.         # 在这里添加其他界面组件和布局
复制代码


然后,我们需要修改 ImageViewer 类,使其在关闭时发出一个信号。这可以通过在类中添加一个自定义信号并在 closeEvent 方法中发出它来实现:

  1. from PySide6.QtCore import Signal

  2. class ImageViewer(QMainWindow):
  3.     # 定义一个自定义信号,当启动画面关闭时发出
  4.     closed = Signal()

  5.     ...

  6.     def closeEvent(self, event):
  7.         # 当窗口关闭时发出信号
  8.         self.closed.emit()
  9.         super(ImageViewer, self).closeEvent(event)
复制代码


最后,修改主程序入口,首先显示启动画面,然后在启动画面关闭后显示主程序界面:

  1. if __name__ == '__main__':
  2.     app = QApplication(sys.argv)

  3.     image_path = 'path/to/your/image.png'  # 请将此处替换为你的图片路径
  4.     display_time_ms = 5000  # 显示图片的时间,单位为毫秒

  5.     viewer = ImageViewer(image_path, display_time_ms)
  6.     main_window = MainWindow()

  7.     def show_main_window():
  8.         main_window.show()
  9.         viewer.deleteLater()

  10.     viewer.closed.connect(show_main_window)
  11.     viewer.show()

  12.     sys.exit(app.exec())
复制代码


这样,在启动画面显示指定时间后关闭时,主程序界面将显示出来。

注意:在这个示例中,我们使用了 deleteLater 方法来在启动画面关闭后释放它占用的资源。这样做是因为我们在启动画面关闭后不再需要它。如果你希望在程序运行期间重复使用启动画面,你可以选择不使用 deleteLater 方法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 07:33:27 | 显示全部楼层
isdkz 发表于 2023-3-24 21:25
为了实现这个功能,你可以将上面提供的 ImageViewer 类作为一个启动画面使用,并在启动画面关闭后显示你 ...

大神你真厉害,谢谢!
能推荐一个pyside6的完整视频教程么?文字版的也行,主要是容易接受,全面介绍功能。
我掌握的都比较零散,没有系统化。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 09:00:37 | 显示全部楼层
子飞鱼 发表于 2023-3-25 07:33
大神你真厉害,谢谢!
能推荐一个pyside6的完整视频教程么?文字版的也行,主要是容 ...

pyside6我也没有什么教程可推荐的,我觉得最好的学习方式就是看官方文档

https://doc.qt.io/qtforpython/
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表