【问题标题】:What is an idiomatic way of executing code AFTER the QDialog is shown in PyQT?在 PyQT 中显示 QDialog 之后执行代码的惯用方式是什么?
【发布时间】:2012-12-24 01:21:26
【问题描述】:

使用show()exec_() 显示QDialog 后,我需要动态添加一些额外的小部件。我该怎么做?

【问题讨论】:

    标签: python qt pyqt pyside qdialog


    【解决方案1】:

    只需在您的小部件上调用show()

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import sip
    sip.setapi('QString', 2)
    sip.setapi('QVariant', 2)
    
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    
    class testDialogs(QWidget):
        def __init__(self, parent=None):
            super(testDialogs, self).__init__(parent)
    
            self.verticalLayout = QVBoxLayout(self)
    
            self.pushButton = QPushButton(self)
            self.pushButton.setText("Open a Dialog")
    
            self.pushButton1 = QPushButton(self)
            self.pushButton1.setText("Add a Text Edit")
    
            self.plainTextEdit = QPlainTextEdit(self)
            self.plainTextEdit.appendPlainText("This is a Widget")
    
            self.verticalLayout.addWidget(self.pushButton)
            self.verticalLayout.addWidget(self.pushButton1)
            self.verticalLayout.addWidget(self.plainTextEdit)
    
            self.pushButton.clicked.connect(self.on_pushButton_clicked)
            self.pushButton1.clicked.connect(self.on_pushButton1_clicked)
    
        @pyqtSlot()
        def on_pushButton_clicked(self):
            dialog = QDialog(self)
            verticalLayout = QVBoxLayout(dialog)
    
            plainTextEdit = QPlainTextEdit(dialog)
            plainTextEdit.appendPlainText("This is a Dialog")
    
            buttonBox = QDialogButtonBox(dialog)
            buttonBox.setOrientation(Qt.Horizontal)
            buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
            buttonBox.setObjectName("buttonBox")
    
            verticalLayout.addWidget(plainTextEdit)
            verticalLayout.addWidget(buttonBox)
    
            buttonBox.accepted.connect(dialog.close)
            buttonBox.rejected.connect(dialog.close)
            dialog.show()
    
        @pyqtSlot()
        def on_pushButton1_clicked(self):
            plainTextEdit = QPlainTextEdit(self)
            plainTextEdit.appendPlainText("This is another Text Edit")
    
            self.verticalLayout.addWidget(plainTextEdit)
            plainTextEdit.show()
    
    
    if __name__ == "__main__":
        import  sys
    
        app = QApplication(sys.argv)
        main = testDialogs()
        main.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 谢谢你,它帮助了一点。你能告诉我一些关于在显示 QDialog 之后添加小部件的代码吗?
    • @liamzebedee Qdialog 继承自 QWidget,以及所有其他 Qt 用户界面对象(QMainWindowQComboBox 等)。您可以运行脚本,将 QWidget 替换为 QDialog,或使用任何其他还没有布局的小部件
    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 2012-10-27
    • 2019-10-03
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多