该算法允许每次单击按钮时打开一个新窗口,但是当再次单击该按钮时窗口会关闭,我需要对其进行修改,以便每次单击它都会生成一个新窗口,而无需关闭之前的窗口一个。
代码:
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 变量,但它不起作用
您的代码生成三个窗口,并使用主窗口中的按钮隐藏/显示其他两个窗口。要在按下按钮时生成新窗口,您需要调用 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_()
好吧,我想出了如何以编程方式关闭“另一个窗口”对象:
我在函数中添加了“返回窗口”:
def open_newWindow(self):
window = AnotherWindow()
self.windows.append(window)
window.show()
return window
然后打开一个新窗口
mynewwindow = w.open_newWindow()
我可以简单地使用的地方
mynewwindow.close()
关闭该窗口。