gpt4 book ai didi

python - 如何在pyqt5中动态切换屏幕并具有启动效果

转载 作者:行者123 更新时间:2023-12-01 08:12:02 27 4
gpt4 key购买 nike

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

我有两个屏幕类。屏幕类有一键切换屏幕。

如何切换屏幕?

代码:

import sys
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.width = width
self.height = 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)

def sizeHint(self):
return QtCore.QSize(self.width, self.height)


class ScreenNext(QtWidgets.QWidget):
def __init__(self):
super().__init__(flags=QtCore.Qt.SplashScreen)

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()

self.next_button.clicked.connect(self.switch_screen)

self.show()

def switch_screen(self):
print("ScreenNext")


class ScreenReturn(QtWidgets.QWidget):
def __init__(self):
super().__init__(flags=QtCore.Qt.SplashScreen)

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()

self.return_button.clicked.connect(self.switch_screen)

self.show()

def switch_screen(self):
print("ScreenReturn")


if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

screen = ScreenReturn()

sys.exit(app.exec_())

获取链接中的图片:http://www.filedropper.com/images_1

在链接中获取gif演示:http://www.filedropper.com/display

最佳答案

根据您分享的.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_())

关于python - 如何在pyqt5中动态切换屏幕并具有启动效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55187069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com