【问题标题】:Display a dialog within the main window在主窗口中显示一个对话框
【发布时间】:2020-05-13 10:04:09
【问题描述】:

当按下Hello! 时,下面的代码会创建一个空对话框:

from PyQt5 import QtWidgets, QtCore

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        w = QtWidgets.QWidget()
        layout = QtWidgets.QVBoxLayout()
        w.setLayout(layout)
        self.setCentralWidget(w)

        toyButton = QtWidgets.QPushButton("Hello!")
        layout.addWidget(toyButton)
        toyButton.clicked.connect(self.showdialog)

    def showdialog(self):
        d = QtWidgets.QDialog()
        d.setWindowTitle("Dialog")
        d.setWindowModality(QtCore.Qt.WindowModal)
        d.exec_()

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

如何强制对话框出现在主窗口中,而不是让它作为一个独立的窗口浮动?

【问题讨论】:

    标签: python python-3.x pyqt5 qdialog


    【解决方案1】:

    您只需给对话框一个父窗口小部件:d = QtWidgets.QDialog(self.centralWidget())self 也是有效的父级;选择你最喜欢的!

    您也可以在布局中添加dself.centralWidget().layout().addWidget(d); 虽然第二个不尊重你的方式+执行。

    这是比较两种方法的完整代码:

    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
    
            w = QtWidgets.QWidget()
            layout = QtWidgets.QVBoxLayout()
            w.setLayout(layout)
            self.setCentralWidget(w)
    
            toyButton = QtWidgets.QPushButton("Hello!")
            layout.addWidget(toyButton)
            toyButton.clicked.connect(self.showdialog)
    
            toyButton2 = QtWidgets.QPushButton("Hello2!")
            layout.addWidget(toyButton2)
            toyButton2.clicked.connect(self.showdialog2)
    
        def showdialog(self):
            d = QtWidgets.QDialog(self.centralWidget())
            d.setWindowTitle("Dialog")
            d.setWindowModality(QtCore.Qt.WindowModal)
            d.exec_()
    
        def showdialog2(self):
            d = QtWidgets.QDialog()
            d.setWindowTitle("Dialog2")   # window title won't be seen...
            d.setWindowModality(QtCore.Qt.WindowModal)
            QtWidgets.QPushButton('Dialog2', parent=d) # ... so we add a little something
            self.centralWidget().layout().addWidget(d)
            d.exec_()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多