Python PyQt4 从 QDialog 打开新的 QWidget window
Python PyQt4 open from QDialog new QWidget window
通过在我的 QDialog window 中按下 QPushButton,我想打开一个新的 QWidget window。
我的代码:
from PyQt4 import QtGui
import sys
class MainWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle("Main Window")
class FirstWindow(QtGui.QDialog):
def __init__(self, parent=None):
super(FirstWindow, self).__init__(parent)
self.createWindow()
def createWindow(self):
btn = QtGui.QPushButton('Open New Window', self)
btn.move(10, 10)
self.openNewWindow = MainWindow(self)
btn.clicked.connect(self.openMainWin)
self.setGeometry(250,250, 150,50)
self.setWindowTitle("First Window")
self.show()
def openMainWin(self):
self.openNewWindow.show()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
firstwin = FirstWindow()
sys.exit(app.exec_())
当我 运行 代码按下按钮时没有任何反应。
但是当我将 class 从
class MainWindow(QtGui.QWidget)
至
class MainWindow(QtGui.QDialog)
或 class MainWindow(QtGui.QMainWindow)
有效!
我做错了什么?!请帮助我。
当您实例化 MainWindow
时,您会传入一个父对象。 Qwidget
仅在您未指定父项时创建新的 window。
这当然是故意的。如果 QWidgets
和父级显示在新的 windows 中,那么您将永远无法构建 GUI。想象一下,每个小部件都属于自己 window!
QMainWindow
和 QDialog
专门设计用于同时拥有一个父级,并创建一个新的 window。你应该使用它们。
通过在我的 QDialog window 中按下 QPushButton,我想打开一个新的 QWidget window。 我的代码:
from PyQt4 import QtGui
import sys
class MainWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle("Main Window")
class FirstWindow(QtGui.QDialog):
def __init__(self, parent=None):
super(FirstWindow, self).__init__(parent)
self.createWindow()
def createWindow(self):
btn = QtGui.QPushButton('Open New Window', self)
btn.move(10, 10)
self.openNewWindow = MainWindow(self)
btn.clicked.connect(self.openMainWin)
self.setGeometry(250,250, 150,50)
self.setWindowTitle("First Window")
self.show()
def openMainWin(self):
self.openNewWindow.show()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
firstwin = FirstWindow()
sys.exit(app.exec_())
当我 运行 代码按下按钮时没有任何反应。
但是当我将 class 从
class MainWindow(QtGui.QWidget)
至
class MainWindow(QtGui.QDialog)
或 class MainWindow(QtGui.QMainWindow)
有效!
我做错了什么?!请帮助我。
当您实例化 MainWindow
时,您会传入一个父对象。 Qwidget
仅在您未指定父项时创建新的 window。
这当然是故意的。如果 QWidgets
和父级显示在新的 windows 中,那么您将永远无法构建 GUI。想象一下,每个小部件都属于自己 window!
QMainWindow
和 QDialog
专门设计用于同时拥有一个父级,并创建一个新的 window。你应该使用它们。