如何将子窗口放入主窗口(PyQt)中
我在stackoverflow和google中查找了几天类似我的案例,但我发现的所有示例都不起作用 我想要的是让我的父窗口与菜单一起,然后从该菜单调用其他子窗口,并在父窗口内执行/显示它们 我尝试在父窗口中放置一个小部件,并调用其中的子窗口,使用MDIArea,但没有任何效果 注意事项: 我的屏幕文件是由Qt designer生成的,我正在创建单独的类来操作小部件、按钮等,以使一切都更有条理 我使用QtDesigner在主窗口中创建了MdiArea,并在一个类中创建了MdiArea,该类通过单击MdiArea中我调用的子窗口(也使用QtDesigner创建的小部件)触发如何将子窗口放入主窗口(PyQt)中,qt,pyqt,parent,childwindow,Qt,Pyqt,Parent,Childwindow,我在stackoverflow和google中查找了几天类似我的案例,但我发现的所有示例都不起作用 我想要的是让我的父窗口与菜单一起,然后从该菜单调用其他子窗口,并在父窗口内执行/显示它们 我尝试在父窗口中放置一个小部件,并调用其中的子窗口,使用MDIArea,但没有任何效果 注意事项: 我的屏幕文件是由Qt designer生成的,我正在创建单独的类来操作小部件、按钮等,以使一切都更有条理 我使用QtDesigner在主窗口中创建了MdiArea,并在一个类中创建了MdiArea,该类通过单击
from resources.SubWindowQtDes import Ui_SubWindow
from resources.MainWindowQTDes import Ui_MainWindow
class cadastraAluno(Ui_SubWindow,Ui_MainWindow):
def __init__(self, parent=None):
super(cadastraAluno, self).__init__(parent = None)
dialog = Ui_SubWindow()
window = Ui_MainWindow()
mdi = window.mdiArea
mdi.addSubWindow(dialog, flags = 0)
dialog.show()
下面是我通常为子窗口执行的操作:
class subwindow(QtGui.QWidget):
def createWindow(self,WindowWidth,WindowHeight):
parent=None
super(subwindow,self).__init__(parent)
selt.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
self.resize(WindowWidth,WindowHeight)
class mainwindow(QtGui.QMainWindow):
def __init__(self, parent=None):
[...]
def createsASubwindow(self):
self.mySubwindow=subwindow()
self.mySubwindow.createWindow(500,400)
#make pyqt items here for your subwindow
#for example self.mySubwindow.button=QtGui.QPushButton(self.mySubwindow)
self.mySubwindow.show()
这样,您就有了一个子窗口,它始终位于主窗口的顶部,并且只能实例化一次
我希望这对我有所帮助,我找到了一种方法。我使用了
self.show()
而不是dialog.show()
和self.mdiArea
而不是window.mdiArea
现在我关闭窗口,用我想要的小部件再次显示它。我想找到一种方法来“刷新”窗口。但这是另一个话题的主题。非常感谢各位。如果您真的希望子窗口位于父窗口内,那么MdiArea可能是一个不错的选择。这些窗口实际上不是子窗口,它们只是MdiArea小部件的子窗口。当你尝试这个方法时,它是如何失败的?我在问题中放了一段代码(仍在学习如何在stackoverflow he he he中使用markdown),其中包含我称之为MdiArea的类。问题是,当我单击菜单调用de Mdi中的子窗口时,Eclipse显示一个错误,说明我的Ui_MainWindow没有atribute mdiArea,尽管我使用自动完成只是为了确保。mdiArea是我在QtDesigner生成的文件中为QmdiArea指定的名称。您是否忘记实例化
Ui_MainWindow
(例如,window=Ui\u MainWindow()
结尾带有()
)嗯,我设法跳过了这个错误…我用:类地籍号(QMainWindow,Ui\u MainWindow)
和self.setupUi(self)更改了代码
。之后Eclipse不再显示错误,但不会发生任何情况,子窗口不会被调用。它会调用子窗口,依此类推。但我无法保持子窗口“嵌入”在父窗口中…我甚至在我单击菜单时调用的类中创建了一个MdiWindow…Eclipse上没有错误,但仍然没有发生任何事情…似乎我无法在父窗口中动态操作我的小部件,使它们根据需要显示和删除…也许您可以看看示例Python27\Lib\site packages\PyQt4\examples\demos\embeddeddialogs\embeddeddialogs.py,它可能使用您正在寻找的功能。我找到了一种使用QmdiArea的方法。它现在可以工作了。:)