首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QStackedLayout显示空窗口一段时间

QStackedLayout显示空窗口一段时间
EN

Stack Overflow用户
提问于 2022-05-15 16:34:52
回答 1查看 73关注 0票数 1

在本例中,作为主窗口,我使用包含QWidgetQPushButtonQPushButton将当前小部件更改为QStackedLayout

代码语言:javascript
运行
复制
from PySide6.QtWidgets import QFrame, QWidget, QApplication, QVBoxLayout, QStackedLayout, QPushButton
from PySide6.QtCore import Qt


class ColorWidget(QFrame):
    def __init__(self, color):
        super(ColorWidget, self).__init__()
        self.setFixedSize(200, 200)
        self.setStyleSheet(f"background-color: {color}; border-radius: 6px;")
        # Some widget. In this case, just a colored background.


class MainWidget(QWidget):
    def __init__(self):
        super(MainWidget, self).__init__()
        self.current_widget = False

        layout = QStackedLayout()
        layout.addWidget(ColorWidget("red"))
        layout.addWidget(ColorWidget("yellow"))
        layout.setCurrentIndex(0)

        self.setLayout(layout)
        # Main widget. Contains 2 colored widgets.

    def change_visible_widget(self):
        self.current_widget = not self.current_widget
        self.layout().setCurrentIndex(int(self.current_widget))


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        # no frame, no background

        layout = QVBoxLayout()

        main_widget = MainWidget()
        button = QPushButton("change")
        button.clicked.connect(main_widget.change_visible_widget)
        # button to change QStackedLayout index in Main Widget

        layout.addWidget(main_widget)
        layout.addWidget(button)
        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication()
    win = MainWindow()
    win.show()
    app.exec()

问题是,当程序启动时,一个空窗口会出现一段时间。

通过反复试验,我意识到这是因为QStackedLayout,出现的窗口数等于创建的QStackedLayout数(在本例中为1)。

怎么解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-31 08:35:05

只需将self添加到layout = QStackedLayout()

代码语言:javascript
运行
复制
from PySide6.QtWidgets import QFrame, QWidget, QApplication, QVBoxLayout, QStackedLayout, QPushButton
from PySide6.QtCore import Qt


class ColorWidget(QFrame):
    def __init__(self, color):
        super(ColorWidget, self).__init__()
        self.setFixedSize(200, 200)
        
        self.setStyleSheet(f"background-color: {color}; border-radius: 6px;")
        # Some widget. In this case, just a colored background.


class MainWidget(QWidget):
    def __init__(self):
        super(MainWidget, self).__init__()
        self.current_widget = False

        layout = QStackedLayout(self)
        layout.addWidget(ColorWidget("red"))
        layout.addWidget(ColorWidget("yellow"))
        layout.setCurrentIndex(0)
        
        # Main widget. Contains 2 colored widgets.

    def change_visible_widget(self):
        self.current_widget = not self.current_widget
        self.layout().setCurrentIndex(int(self.current_widget))


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        # no frame, no background

        layout = QVBoxLayout()
        main_widget = MainWidget()
        button = QPushButton("change")
        button.clicked.connect(main_widget.change_visible_widget)
        # button to change QStackedLayout index in Main Widget

        layout.addWidget(main_widget)
        layout.addWidget(button)
        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication()
    win = MainWindow()
    win.show()
    app.exec()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72250212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档