如何从主打开一个新的 window
How to open a new window from the main one
我用 Qt 设计器创建了两个 windows。现在在第三个文件中,我试图导入 类 并通过单击另一个中的 QPushButton
打开其中一个。
第一个,main_gui.py
,是这样的:
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
...
...
...
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
第二个 single_plot_gui.py
具有相同的序言,如下所示:
class Ui_Form_single_plot(object):
def setupUi(self, Form_single_plot):
Form_single_plot.setObjectName(_fromUtf8("Form_single_plot"))
...
...
...
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form_single_plot = QtGui.QWidget()
ui = Ui_Form_single_plot()
ui.setupUi(Form_single_plot)
Form_single_plot.show()
sys.exit(app.exec_())
现在我的第三个文件中有:
from main_gui import Ui_Form
from single_plot_gui import Ui_Form_single_plot
class SinglePlotWindow(QtGui.QMainWindow, Ui_Form_single_plot):
def __init__(self, parent=None):
super(SinglePlotWindow, self).__init__(parent)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setupUi(self)
class Main_Window(QtGui.QWidget, Ui_Form):
def __init__(self, parent=None):
super(Main_Window, self).__init__(parent)
self.setupUi(self)
self.open_single_plotButton.clicked.connect(self.OpenSinglePlot)
def OpenSinglePlot(self):
window = SinglePlotWindow(self)
window.show()
但是当我按下 open_single_plotButton
时,SinglePlotWindow
出现在主 window 的顶部,而不是显示新的 window。
我做错了什么?
在这个 answer 中,他们做了一些非常相似的事情,但我没有做到......
您需要创建第二个 window 没有 父级,并在显示后保留对它的引用。所以你的按钮处理程序应该是这样的:
def OpenSinglePlot(self):
self.plotWindow = SinglePlotWindow()
self.plotWindow.show()
我用 Qt 设计器创建了两个 windows。现在在第三个文件中,我试图导入 类 并通过单击另一个中的 QPushButton
打开其中一个。
第一个,main_gui.py
,是这样的:
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
...
...
...
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
第二个 single_plot_gui.py
具有相同的序言,如下所示:
class Ui_Form_single_plot(object):
def setupUi(self, Form_single_plot):
Form_single_plot.setObjectName(_fromUtf8("Form_single_plot"))
...
...
...
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form_single_plot = QtGui.QWidget()
ui = Ui_Form_single_plot()
ui.setupUi(Form_single_plot)
Form_single_plot.show()
sys.exit(app.exec_())
现在我的第三个文件中有:
from main_gui import Ui_Form
from single_plot_gui import Ui_Form_single_plot
class SinglePlotWindow(QtGui.QMainWindow, Ui_Form_single_plot):
def __init__(self, parent=None):
super(SinglePlotWindow, self).__init__(parent)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setupUi(self)
class Main_Window(QtGui.QWidget, Ui_Form):
def __init__(self, parent=None):
super(Main_Window, self).__init__(parent)
self.setupUi(self)
self.open_single_plotButton.clicked.connect(self.OpenSinglePlot)
def OpenSinglePlot(self):
window = SinglePlotWindow(self)
window.show()
但是当我按下 open_single_plotButton
时,SinglePlotWindow
出现在主 window 的顶部,而不是显示新的 window。
我做错了什么?
在这个 answer 中,他们做了一些非常相似的事情,但我没有做到......
您需要创建第二个 window 没有 父级,并在显示后保留对它的引用。所以你的按钮处理程序应该是这样的:
def OpenSinglePlot(self):
self.plotWindow = SinglePlotWindow()
self.plotWindow.show()