【发布时间】:2015-05-26 23:02:10
【问题描述】:
我在 stackoverflow 和 google 中查看了几天来寻找类似我的案例,但我发现的所有示例都不起作用。
我想要的是让我的父窗口带有菜单,然后从该菜单调用其他子窗口并在父窗口中执行/显示它们。
我尝试在父窗口中放置一个小部件并在其中调用子窗口,使用 MDIArea,但没有任何效果。
观察: 我的屏幕文件是从 Qt 设计器生成的,我正在制作单独的类来操作小部件、按钮等,以使一切更有条理。
我使用 QtDesigner 在我的主窗口中创建了 MdiArea,并在通过单击 MdiArea 内部调用子窗口(也使用 QtDesigner 创建的小部件)的菜单触发的类中创建了它们。
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()
【问题讨论】:
-
如果您确实希望子窗口位于父窗口内部,那么 MdiArea 可能是要走的路。不过,这些并不是真正的子窗口,它们只是 MdiArea 小部件的子窗口。当你尝试这个时它是如何失败的?
-
我在问题中放了一段代码(仍在学习如何在stackoverflow中使用markdown),其中包含我称为MdiArea的类。问题是当我单击菜单调用 de Mdi 内的子窗口时,Eclipse 显示一个错误,告诉我我的 Ui_MainWindow 没有属性 mdiArea,尽管我使用自动完成只是为了确定。
-
mdiarea 是我在 QtDesigner 生成的文件中给 QmdiArea 的名称。
-
您是否忘记实例化
Ui_MainWindow(例如window = Ui_MainWindow(),末尾带有())? -
嗯,我设法跳过了错误...我使用
class cadastraAluno(QMainWindow,Ui_MainWindow)和self.setupUi(self)更改了代码。之后 Eclipse 不再显示错误,但没有发生,子窗口没有被调用。
标签: qt pyqt parent childwindow