子飞鱼 发表于 2023-3-24 20:17:54

求教如何再pyside6中展示图片?

求教如何再pyside6中展示图片?
隐藏展示图片的主界面外框。
图片展示持续指定时间后,消失。
求大神给出思路和方案。

isdkz 发表于 2023-3-24 20:27:47

在 PySide6(Qt for Python)中展示图片,可以使用 QLabel 控件和 QPixmap 类来实现。你可以创建一个自定义的窗口,设置透明度,然后在指定时间后关闭窗口。这里是一个简单的实现方案:

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

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

import sys
from PySide6.QtCore import Qt, QTimer
from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow


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

      self.image_label = QLabel(self)
      self.setCentralWidget(self.image_label)
      self.display_image(image_path)

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

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

    def display_image(self, image_path):
      pixmap = QPixmap(image_path)
      self.image_label.setPixmap(pixmap)
      self.image_label.setScaledContents(True)
      self.resize(pixmap.size())


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

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

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

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

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

python image_viewer.py
这个方案应该可以满足你的需求。请尝试修改代码以满足其他特定需求。

歌者文明清理员 发表于 2023-3-24 20:28:28

展示图片可以使用QLabel控件,并设置其背景图片。隐藏外框可以使用setFrameShape方法将边框设置为无边框。展示图片持续指定时间后消失可以使用QTimer控件,设置定时器时间后,在定时器时间到达时隐藏图片。
以下是示例代码:
import sys
from PySide6.QtCore import QTimer
from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow
class ImageWindow(QMainWindow):
    def __init__(self, image_path, duration=5000):
      super().__init__()
      self.image_path = image_path
      self.duration = duration
      self.initUI()
   
    def initUI(self):
      # 创建QLabel控件,并设置背景图片
      label = QLabel(self)
      pixmap = QPixmap(self.image_path)
      label.setPixmap(pixmap)
      # 隐藏外框
      label.setFrameShape(QLabel.NoFrame)
      # 调整窗口大小为图片大小
      self.resize(pixmap.width(), pixmap.height())
      # 创建定时器,持续指定时间后隐藏图片
      timer = QTimer(self)
      timer.setSingleShot(True)
      timer.timeout.connect(label.hide)
      timer.start(self.duration)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = ImageWindow('image.jpg', 5000)
    window.show()
    sys.exit(app.exec())
在上述代码中,ImageWindow类为展示图片的主窗口,其初始化方法中创建了一个QLabel控件,并设置其背景图片、隐藏外框和调整窗口大小。同时创建了一个定时器,持续指定时间后隐藏图片。在main函数中创建ImageWindow实例并显示窗口。

子飞鱼 发表于 2023-3-24 21:05:46

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

大神你好,问题基本解决。但还想再追问一下,如果图片小时候,我还需要继续展示其他的程序界面怎么办?
就像用pycharm程序,打开后显示弹出一个prcharm的图片,显示几秒后消失,出现了程序的主界面。

子飞鱼 发表于 2023-3-24 21:08:21

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

我的想法是再定义两个界面的类,第一个类用你刚才发的代码实现展示图片和指定时间消失。
但是怎么自动运行到第二个界面的类?

isdkz 发表于 2023-3-24 21:25:39

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

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

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

from PySide6.QtWidgets import QMainWindow

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
      super(MainWindow, self).__init__(parent)
      self.setWindowTitle('主程序界面')
      # 在这里添加其他界面组件和布局

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

from PySide6.QtCore import Signal

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

    ...

    def closeEvent(self, event):
      # 当窗口关闭时发出信号
      self.closed.emit()
      super(ImageViewer, self).closeEvent(event)

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

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

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

    viewer = ImageViewer(image_path, display_time_ms)
    main_window = MainWindow()

    def show_main_window():
      main_window.show()
      viewer.deleteLater()

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

    sys.exit(app.exec())

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

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

子飞鱼 发表于 2023-3-25 07:33:27

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

{:5_106:}{:5_106:} 大神你真厉害,谢谢!
能推荐一个pyside6的完整视频教程么?文字版的也行,主要是容易接受,全面介绍功能。
我掌握的都比较零散,没有系统化。

isdkz 发表于 2023-3-25 09:00:37

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

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

https://doc.qt.io/qtforpython/
页: [1]
查看完整版本: 求教如何再pyside6中展示图片?