[英]opening a new window
我開始使用 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的回答中:如何打開新窗口是使用 QMainWindow 與使用 QWidget 的您不同。
QMainWindow 和 QWidget 有什么區別?
QMainWindow
是一個自定義的QWidget
,它有一些標志被激活,包括標志Qt::Window
。 如文檔所示:
表示widget是一個窗口,通常有一個窗口系統框架和一個標題欄,不管widget是否有父級。 請注意,如果小部件沒有父級,則無法取消設置此標志。
也就是說,即使該小部件具有父小部件,它也會成為一個窗口。
所以解決方案是在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
繼承自QMainWindow
或QDialog
。
不要將父級傳遞給 Window2: self.newindow = Window2()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.