pyqt5 中的多个窗口

问题描述 投票:0回答:2

该算法允许每次单击按钮时打开一个新窗口,但是当再次单击该按钮时窗口会关闭,我需要对其进行修改,以便每次单击它都会生成一个新窗口,而无需关闭之前的窗口一个。

代码:

import sys
from random import randint

from PyQt5.QtWidgets import (
    QApplication,
    QLabel,
    QMainWindow,
    QPushButton,
    QVBoxLayout,
    QWidget,
)


class AnotherWindow(QWidget):
    """
    This "window" is a QWidget. If it has no parent,
    it will appear as a free-floating window.
    """

    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        self.label = QLabel("Another Window % d" % randint(0, 100))
        layout.addWidget(self.label)
        self.setLayout(layout)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.window1 = AnotherWindow()
        self.window2 = AnotherWindow()

        l = QVBoxLayout()
        button1 = QPushButton("Push for Window 1")
        button1.clicked.connect(self.toggle_window1)
        l.addWidget(button1)

        button2 = QPushButton("Push for Window 2")
        button2.clicked.connect(self.toggle_window2)
        l.addWidget(button2)

        w = QWidget()
        w.setLayout(l)
        self.setCentralWidget(w)

    def toggle_window1(self, checked):
        if self.window1.isVisible():
            self.window1.hide()

        else:
            self.window1.show()

    def toggle_window2(self, checked):
        if self.window2.isVisible():
            self.window2.hide()

        else:
            self.window2.show()


app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()

我尝试在每次给出按钮时更改新小部件的 Windows 变量,但它不起作用

python pyqt pyqt5
2个回答
3
投票

您的代码生成三个窗口,并使用主窗口中的按钮隐藏/显示其他两个窗口。要在按下按钮时生成新窗口,您需要调用 AnotherWindow 的新实例并将它们存储在 MainWindow 中。

例如:

import sys
from random import randint

from PyQt5.QtWidgets import (
    QApplication,
    QLabel,
    QMainWindow,
    QPushButton,
    QVBoxLayout,
    QWidget,
)


class AnotherWindow(QWidget):
    """
    This "window" is a QWidget. If it has no parent,
    it will appear as a free-floating window.
    """

    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        self.label = QLabel("Another Window % d" % randint(0, 100))
        layout.addWidget(self.label)
        self.setLayout(layout)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.windows = []

        l = QVBoxLayout()
        button1 = QPushButton("Push for new window")
        button1.clicked.connect(self.open_newWindow)
        l.addWidget(button1)

        w = QWidget()
        w.setLayout(l)
        self.setCentralWidget(w)

    def open_newWindow(self):
        window = AnotherWindow()
        self.windows.append(window)
        window.show()


app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()

0
投票

好吧,我想出了如何以编程方式关闭“另一个窗口”对象:

我在函数中添加了“返回窗口”:

def open_newWindow(self):
    window = AnotherWindow()
    self.windows.append(window)
    window.show()
    return window

然后打开一个新窗口

mynewwindow = w.open_newWindow()

我可以简单地使用的地方

mynewwindow.close()

关闭该窗口。

© www.soinside.com 2019 - 2024. All rights reserved.