gpt4 book ai didi

python - 打开一个新窗口

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

我开始使用 PyQt5 学习 OOP,所以我尝试创建一个带有按钮的窗口,当单击该按钮时,我想显示一个新窗口。我编写了这段代码,但它不起作用,它只显示带有按钮的窗口,但按钮没有执行任何操作,看起来它只是在等待,但它也没有给我任何错误

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

class Window2(QWidget):
def __init__(self, parent=None):
super(Window2, self).__init__(parent)


class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)

self.init_ui()

def init_ui(self):
self.btn = QPushButton("Push Me")
layout = QVBoxLayout()

layout.addWidget(self.btn)

self.setLayout(layout)
self.setWindowTitle("PyQt5 double window")

self.btn.clicked.connect(self.btn_clk)
self.newindow = Window2(self)

self.show()

def btn_clk(self):
self.newindow.show()

app = QApplication(sys.argv)
a_window = Window()
sys.exit(app.exec_())

这个问题引导了我PyQT: how to open new window但它是用 PyQt4 编写的,我不确定这两者之间的区别。

最佳答案

PyQT: how to open new window的回答中使用 QMainWindow 与使用 QWidget 不同。

QMainWindow 和 QWidget 有什么区别?

QMainWindow 是一个自定义 QWidget,它激活了一些标志,包括标志 Qt::Window。如 docs 所示表示:

Indicates that the widget is a window, usually with a window system frame and a title bar, irrespective of whether the widget has a parent or not. Note that it is not possible to unset this flag if the widget does not have a parent.

也就是说,即使该小部件有父小部件,它也会成为一个窗口。

所以解决方案是在Window2中激活这个标志:

import sys
from PyQt5 import QtCore, QtWidgets

class Window2(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window2, self).__init__(parent, QtCore.Qt.Window) # <---

class Window(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.init_ui()

def init_ui(self):
self.btn = QtWidgets.QPushButton("Push Me")
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.btn)
self.setWindowTitle("PyQt5 double window")
self.btn.clicked.connect(self.btn_clk)
self.newindow = Window2(self)
self.show()

def btn_clk(self):
self.newindow.show()

if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
a_window = Window()
sys.exit(app.exec_())

其他替代解决方案是:

  • 使Window2继承自QMainWindowQDialog

  • 不要将父级传递给 Window2:self.newindow = Window2()

关于python - 打开一个新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084363/

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