Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将子窗口放入主窗口(PyQt)中_Qt_Pyqt_Parent_Childwindow - Fatal编程技术网

如何将子窗口放入主窗口(PyQt)中

如何将子窗口放入主窗口(PyQt)中,qt,pyqt,parent,childwindow,Qt,Pyqt,Parent,Childwindow,我在stackoverflow和google中查找了几天类似我的案例,但我发现的所有示例都不起作用 我想要的是让我的父窗口与菜单一起,然后从该菜单调用其他子窗口,并在父窗口内执行/显示它们 我尝试在父窗口中放置一个小部件,并调用其中的子窗口,使用MDIArea,但没有任何效果 注意事项: 我的屏幕文件是由Qt designer生成的,我正在创建单独的类来操作小部件、按钮等,以使一切都更有条理 我使用QtDesigner在主窗口中创建了MdiArea,并在一个类中创建了MdiArea,该类通过单击

我在stackoverflow和google中查找了几天类似我的案例,但我发现的所有示例都不起作用

我想要的是让我的父窗口与菜单一起,然后从该菜单调用其他子窗口,并在父窗口内执行/显示它们

我尝试在父窗口中放置一个小部件,并调用其中的子窗口,使用MDIArea,但没有任何效果

注意事项: 我的屏幕文件是由Qt designer生成的,我正在创建单独的类来操作小部件、按钮等,以使一切都更有条理

我使用QtDesigner在主窗口中创建了MdiArea,并在一个类中创建了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()

下面是我通常为子窗口执行的操作:

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的方法。它现在可以工作了。:)