python - 当指定父窗口时,PyQt5 窗口未在 show() 上打开

标签 python pyqt5

我定义了一个简单的主窗口和第二个弹出窗口。当我调用 MainWindow.create_new_window() 方法时,SecondWindow 不会显示为新窗口,但它的 QLabel 是在 MainWindow 实例中创建的。代码如下:

import sys

from PyQt5.QtWidgets import QApplication, QPushButton, QLabel, QWidget, QVBoxLayout

class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.second_window = None

        self.main_layout = QVBoxLayout(self)

        self.new_window_button = QPushButton('New Window', self)
        self.new_window_button.clicked.connect(self.create_new_window)

        self.main_layout.addWidget(self.new_window_button)

    def create_new_window(self):
        if self.second_window is None:
            self.second_window = SecondWindow(self)
        self.second_window.show()


class SecondWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super(SecondWindow, self).__init__(*args, **kwargs)

        self.main_layout = QVBoxLayout(self)

        self.hello_label = QLabel('Hello I am the second window.', self)

        self.main_layout.addWidget(self.hello_label)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainwin = MainWindow()
    mainwin.show()
    sys.exit(app.exec_())

当我创建第二个窗口而未将 MainWindow 实例指定为父窗口 (self.second_window = SecondWindow()) 时,它会按预期打开。谁能告诉我这是怎么回事?

最佳答案

默认情况下,具有父级的 QWidget 意味着该小部件将放置在父级内,因此您可以观察到该行为。

如果你希望它成为一个窗口,那么你必须激活标志 Qt::Window

# ...
from PyQt5.QtCore import Qt

# ...
class SecondWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super(SecondWindow, self).__init__(*args, **kwargs)
        self.setWindowFlags(self.windowFlags() | Qt.Window) # <---
# ...

其他选项是使用 QDialog,它是一种小部件,默认情况下已激活该标志,其目的是向用户询问信息。

关于python - 当指定父窗口时,PyQt5 窗口未在 show() 上打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067373/

相关文章:

python - + : 'NoneType' and 'int' 不支持的操作数类型

python - 如何在 Python 中使用 selenium 滚动到页面末尾?

来自 for 循环的 Python 类

python - PyQt5 QTextBrowser - setText - 对齐问题?

python - raise_(​​) 函数被忽略

python - 如何在azure上的同一云服务中部署多台机器

python - Eclipse 看不到 PySide 类

python - 如何用Pyqt5 QtMultimedia播放声音?

python - PYQT 使用 QSqlRelationalTableModel 和 QtableView 添加新记录

python - 如何更新 Ui_MainWindow 中的 pyqt5 进度条