PyQt 在 QMainWindow 中创建 QDialog

Posted

技术标签:

【中文标题】PyQt 在 QMainWindow 中创建 QDialog【英文标题】:PyQt Creating a QDialog inside a QMainWindow 【发布时间】:2015-07-10 14:47:22 【问题描述】:

我正在学习 PyQt 并尝试将 QDialog 放在 QMainWindow 中(以混合布局)。我只是不明白为什么我在 MainWindow 中有 2 个单独的窗口而不是我的 Dialog。

Tks 提前。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore

class Btns(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Btns, self).__init__(parent)
        grid = QtGui.QGridLayout(self)
        self.setLayout(grid)
        btnv=QtGui.QPushButton("valider")
        grid.addWidget(btnv, 0,0)
        btna=QtGui.QPushButton("annuler")
        grid.addWidget(btna,0,1)
        btns=QtGui.QPushButton("sortir")
        grid.addWidget(btns, 1,1)
        btnr=QtGui.QPushButton("retour")
        grid.addWidget(btnr, 1,0)
        self.show()

class MaFenetre(QtGui.QMainWindow):
    def __init__(self):
        super(MaFenetre, self).__init__()
        self.initMb()
        self.initBtns()


    def initMb(self):
        menu_bar = self.menuBar()
        file_menu = menu_bar.addMenu('&Fichier')


    def initBtns(self):
        btns = Btns(self)

def main():
    app = QtGui.QApplication(sys.argv)
    mf = MaFenetre()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

【问题讨论】:

【参考方案1】:

QDialog 类是对话窗口的基类。对话窗口是一个顶层窗口,主要用于短期任务和与用户的简短交流。

[来源:QDialog 上的 Qt 文档]

QDialog 应该创建一个新窗口!如果您不想要新窗口,请不要使用QDialog。考虑改用QWidget

【讨论】:

以上是关于PyQt 在 QMainWindow 中创建 QDialog的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 - 显示来自不同类的 QDialog

当我尝试在 python 中创建浏览器时出现错误

在 PyQt 中缩放 QWidget

在没有框架的python中创建一个QMainWindow,尽管它是可移动和可调整大小的

如何在我的 Qt 窗口中创建一个“洞”?

在 PyQt 中创建动态按钮