Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在pyqt5中使用飞溅效果动态切换屏幕_Python_Python 3.x_Image_Pyqt_Pyqt5 - Fatal编程技术网

Python 如何在pyqt5中使用飞溅效果动态切换屏幕

Python 如何在pyqt5中使用飞溅效果动态切换屏幕,python,python-3.x,image,pyqt,pyqt5,Python,Python 3.x,Image,Pyqt,Pyqt5,我正在为触摸屏显示器中的切换屏幕制作一个python应用程序。我需要用飞溅效果(不是窗口效果)动态切换屏幕,但我不知道如何切换屏幕 我有两门屏幕课。screen类有一个按钮来切换屏幕 如何切换屏幕 代码: 在链接中获取图像: 获取链接中的gif演示:根据您共享的.gif,您希望小部件占据整个屏幕,因此必须使用showFullScreen,另一方面,最好创建一个处理转换的类,在这种情况下,ScreenManager将在发出相关信号时负责进行转换 import sys from functools

我正在为触摸屏显示器中的切换屏幕制作一个python应用程序。我需要用飞溅效果(不是窗口效果)动态切换屏幕,但我不知道如何切换屏幕

我有两门屏幕课。screen类有一个按钮来切换屏幕

如何切换屏幕

代码:

在链接中获取图像:


获取链接中的gif演示:

根据您共享的.gif,您希望小部件占据整个屏幕,因此必须使用showFullScreen,另一方面,最好创建一个处理转换的类,在这种情况下,ScreenManager将在发出相关信号时负责进行转换

import sys
from functools import partial
from PyQt5 import QtCore, QtGui, QtWidgets


class PicButton(QtWidgets.QPushButton):
    def __init__(self, pixmap, pixmap_pressed, width, height, id_button, parent=None):
        super(PicButton, self).__init__(parent)
        self.pixmap = pixmap
        self.pixmap_pressed = pixmap_pressed
        self.id_buton = id_button
        self.setFixedSize(width, height)

    def paintEvent(self, event):
        if self.isDown():
            pix = self.pixmap_pressed
            print("Pressed button: ", self.id_buton)
        else:
            pix = self.pixmap

        painter = QtGui.QPainter(self)
        painter.drawPixmap(event.rect(), pix)

class ScreenNext(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(800, 450, 800, 450)
        pixmap = QtGui.QPixmap("background.png")
        brush = QtGui.QBrush(pixmap)
        palette = QtGui.QPalette()
        palette.setBrush(QtGui.QPalette.Window, brush)
        self.setPalette(palette)
        self.next_button = PicButton(QtGui.QPixmap("next_screen_up.png"),
                                QtGui.QPixmap("next_screen_down.png"), 111, 61, "next")
        hlayout = QtWidgets.QHBoxLayout(self)
        hlayout.addStretch()
        hlayout.addWidget(self.next_button)
        hlayout.addStretch()

class ScreenReturn(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(800, 450, 800, 450)
        pixmap = QtGui.QPixmap("background.png")
        brush = QtGui.QBrush(pixmap)
        palette = QtGui.QPalette()
        palette.setBrush(QtGui.QPalette.Window, brush)
        self.setPalette(palette)
        self.return_button = PicButton(QtGui.QPixmap("return_screen_up.png"),
                                QtGui.QPixmap("return_screen_down.png"), 111, 61, "return")
        hlayout = QtWidgets.QHBoxLayout(self)
        hlayout.addStretch()
        hlayout.addWidget(self.return_button)
        hlayout.addStretch()


class ScreenManager(QtCore.QObject):
    def __init__(self, parent=None):
        super(ScreenManager, self).__init__(parent)
        self._current_window = None

    def add_transition(self, signal, screen):
        conn = signal.connect(partial(self.open_window, screen))

    def open_window(self, window, *args):
        if self._current_window is not None:
            self._current_window.hide()
        window.showFullScreen()
        self._current_window = window

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    screen1 = ScreenReturn()
    screen2 = ScreenNext()
    manager =  ScreenManager()
    manager.add_transition(screen1.return_button.clicked, screen2)
    manager.add_transition(screen2.next_button.clicked, screen1)
    screen1.showFullScreen()
    sys.exit(app.exec_())

您可以更好地解释自己,可能会显示一个gif、视频等,在其中可以观察到这种效果,而且您的链接会打开一个空白页我已经更新了我的图像链接,并添加了一个gif演示链接。我正在测试您的代码及其工作情况,但我必须适应我的应用程序。但是,我面临的唯一问题是在屏幕事务期间屏幕闪烁。你能帮助我吗?获取链接中的代码:
import sys
from functools import partial
from PyQt5 import QtCore, QtGui, QtWidgets


class PicButton(QtWidgets.QPushButton):
    def __init__(self, pixmap, pixmap_pressed, width, height, id_button, parent=None):
        super(PicButton, self).__init__(parent)
        self.pixmap = pixmap
        self.pixmap_pressed = pixmap_pressed
        self.id_buton = id_button
        self.setFixedSize(width, height)

    def paintEvent(self, event):
        if self.isDown():
            pix = self.pixmap_pressed
            print("Pressed button: ", self.id_buton)
        else:
            pix = self.pixmap

        painter = QtGui.QPainter(self)
        painter.drawPixmap(event.rect(), pix)

class ScreenNext(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(800, 450, 800, 450)
        pixmap = QtGui.QPixmap("background.png")
        brush = QtGui.QBrush(pixmap)
        palette = QtGui.QPalette()
        palette.setBrush(QtGui.QPalette.Window, brush)
        self.setPalette(palette)
        self.next_button = PicButton(QtGui.QPixmap("next_screen_up.png"),
                                QtGui.QPixmap("next_screen_down.png"), 111, 61, "next")
        hlayout = QtWidgets.QHBoxLayout(self)
        hlayout.addStretch()
        hlayout.addWidget(self.next_button)
        hlayout.addStretch()

class ScreenReturn(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(800, 450, 800, 450)
        pixmap = QtGui.QPixmap("background.png")
        brush = QtGui.QBrush(pixmap)
        palette = QtGui.QPalette()
        palette.setBrush(QtGui.QPalette.Window, brush)
        self.setPalette(palette)
        self.return_button = PicButton(QtGui.QPixmap("return_screen_up.png"),
                                QtGui.QPixmap("return_screen_down.png"), 111, 61, "return")
        hlayout = QtWidgets.QHBoxLayout(self)
        hlayout.addStretch()
        hlayout.addWidget(self.return_button)
        hlayout.addStretch()


class ScreenManager(QtCore.QObject):
    def __init__(self, parent=None):
        super(ScreenManager, self).__init__(parent)
        self._current_window = None

    def add_transition(self, signal, screen):
        conn = signal.connect(partial(self.open_window, screen))

    def open_window(self, window, *args):
        if self._current_window is not None:
            self._current_window.hide()
        window.showFullScreen()
        self._current_window = window

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    screen1 = ScreenReturn()
    screen2 = ScreenNext()
    manager =  ScreenManager()
    manager.add_transition(screen1.return_button.clicked, screen2)
    manager.add_transition(screen2.next_button.clicked, screen1)
    screen1.showFullScreen()
    sys.exit(app.exec_())