鱼C论坛

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

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

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

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

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

x
求教如何再pyside6中展示图片?
隐藏展示图片的主界面外框。
图片展示持续指定时间后,消失。
求大神给出思路和方案。
最佳答案
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 方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
这个方案应该可以满足你的需求。请尝试修改代码以满足其他特定需求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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实例并显示窗口。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

发表于 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 方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

https://doc.qt.io/qtforpython/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 03:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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