Python 关闭自定义对话框PyQT5并从中获取数据

Python 关闭自定义对话框PyQT5并从中获取数据,python,qt,pyqt,Python,Qt,Pyqt,我无法使用在Qt Designer中创建的自定义对话框。我知道如何弹出对话框,但我无法从该行文本中获取数据 主程序.py addui.py(对话框) 我对这个程序有一些问题 如果单击“取消”仅退出对话框而不是主程序。(我试着用self.close,self.hide…) 我想在该行文本上添加一个链接,并获得到主程序的链接,但当我单击“添加”关闭对话框并将数据传递到主程序时 我怎么称呼这个对话没关系吧 def open_dialog(self): dialog = QtWidgets.QD

我无法使用在Qt Designer中创建的自定义对话框。我知道如何弹出对话框,但我无法从该行文本中获取数据

主程序.py

addui.py(对话框)

我对这个程序有一些问题

  • 如果单击“取消”仅退出对话框而不是主程序。(我试着用self.close,self.hide…)

  • 我想在该行文本上添加一个链接,并获得到主程序的链接,但当我单击“添加”关闭对话框并将数据传递到主程序时

  • 我怎么称呼这个对话没关系吧

     def open_dialog(self):
       dialog = QtWidgets.QDialog()
       dialog.ui = Form()
       dialog.ui.setupUi(dialog)
       dialog.exec_()
       dialog.show()
    
  • 谢谢。我不知道该怎么做,希望有人能帮我。 再次感谢。

    要做到这一点,您需要执行函数(),这里是您的代码的最低版本,已修复 从PyQt4导入QtCore、QtGui 导入系统

    class PopUpDLG(QtGui.QDialog):
        def __init__(self):
            super(PopUpDLG, self).__init__()
            self.setObjectName("self")
            self.resize(200, 71)
            self.setMinimumSize(QtCore.QSize(200, 71))
            self.setMaximumSize(QtCore.QSize(200, 71))
            self.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("Icons/Plus-32.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.setWindowIcon(icon)
            self.gridLayout = QtGui.QGridLayout(self)
            self.gridLayout.setObjectName("gridLayout")
            self.text_link = QtGui.QLineEdit(self)
            self.text_link.setObjectName("text_link")
            self.gridLayout.addWidget(self.text_link, 0, 0, 1, 2)
            self.add_link = QtGui.QPushButton(self)
            self.add_link.setObjectName("add_link")
            self.gridLayout.addWidget(self.add_link, 1, 0, 1, 1)
            self.cancel_link = QtGui.QPushButton(self)
            self.cancel_link.setObjectName("cancel_link")
            self.gridLayout.addWidget(self.cancel_link, 1, 1, 1, 1)
            self.retranslateUi(self)
            self.cancel_link.clicked.connect(self.reject)
            self.add_link.clicked.connect(self.get_link)
            self.retrunVal = None
    
        def retranslateUi(self, Dialog):
            _translate = QtCore.QCoreApplication.translate
            self.setWindowTitle(_translate("Dialog", "Add link"))
            self.add_link.setText(_translate("Dialog", "Add"))
            self.cancel_link.setText(_translate("Dialog", "Cancel"))
    
        def get_link(self):
            self.retrunVal = self.text_link.text()
            self.accept()
    
        def exec_(self):
            super(PopUpDLG, self).exec_()
            return self.retrunVal
    
    
    class MainDialog(QtGui.QMainWindow):
        def __init__(self):
            super(self.__class__, self).__init__()
            centralwidget = QtGui.QWidget(self)
            self.layout = QtGui.QHBoxLayout(centralwidget)
            self.button = QtGui.QPushButton("Open")
            self.valText = QtGui.QLabel("")
            self.layout.addWidget(self.button)
            self.layout.addWidget(self.valText)
            self.setCentralWidget(centralwidget)
            self.button.clicked.connect(self.open_dialog)
    
        def open_dialog(self):
            dialog = PopUpDLG()
            value = dialog.exec_()
            if value:
                self.valText.setText(value)
    
    
    def main():
         app = QtGui.QApplication(sys.argv)
         form = MainDialog()
         form.show()
         app.exec_()
    
    if __name__ == '__main__':
         main()
    

    dialog.exec_389;();打印(dialog.text\u link.text())
    。另一个问题。我现在了解了它的工作原理,但我想将ui文件与主文件分开。我开始操作对话框上的按钮,但找不到只关闭对话框的命令,可以吗?。如果不可能,我将在main all上执行。我没有得到“我找不到只关闭对话框的命令,可以吗?”,取消和按钮将只关闭对话框,对吗?我现在可以使用>>self.cancel\u link.clicked.connect(DIALOG.reject)来执行打开信号和插槽。看看这里,如果这个答案有帮助,请投票并接受为答案:)
     def open_dialog(self):
       dialog = QtWidgets.QDialog()
       dialog.ui = Form()
       dialog.ui.setupUi(dialog)
       dialog.exec_()
       dialog.show()
    
    class PopUpDLG(QtGui.QDialog):
        def __init__(self):
            super(PopUpDLG, self).__init__()
            self.setObjectName("self")
            self.resize(200, 71)
            self.setMinimumSize(QtCore.QSize(200, 71))
            self.setMaximumSize(QtCore.QSize(200, 71))
            self.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("Icons/Plus-32.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.setWindowIcon(icon)
            self.gridLayout = QtGui.QGridLayout(self)
            self.gridLayout.setObjectName("gridLayout")
            self.text_link = QtGui.QLineEdit(self)
            self.text_link.setObjectName("text_link")
            self.gridLayout.addWidget(self.text_link, 0, 0, 1, 2)
            self.add_link = QtGui.QPushButton(self)
            self.add_link.setObjectName("add_link")
            self.gridLayout.addWidget(self.add_link, 1, 0, 1, 1)
            self.cancel_link = QtGui.QPushButton(self)
            self.cancel_link.setObjectName("cancel_link")
            self.gridLayout.addWidget(self.cancel_link, 1, 1, 1, 1)
            self.retranslateUi(self)
            self.cancel_link.clicked.connect(self.reject)
            self.add_link.clicked.connect(self.get_link)
            self.retrunVal = None
    
        def retranslateUi(self, Dialog):
            _translate = QtCore.QCoreApplication.translate
            self.setWindowTitle(_translate("Dialog", "Add link"))
            self.add_link.setText(_translate("Dialog", "Add"))
            self.cancel_link.setText(_translate("Dialog", "Cancel"))
    
        def get_link(self):
            self.retrunVal = self.text_link.text()
            self.accept()
    
        def exec_(self):
            super(PopUpDLG, self).exec_()
            return self.retrunVal
    
    
    class MainDialog(QtGui.QMainWindow):
        def __init__(self):
            super(self.__class__, self).__init__()
            centralwidget = QtGui.QWidget(self)
            self.layout = QtGui.QHBoxLayout(centralwidget)
            self.button = QtGui.QPushButton("Open")
            self.valText = QtGui.QLabel("")
            self.layout.addWidget(self.button)
            self.layout.addWidget(self.valText)
            self.setCentralWidget(centralwidget)
            self.button.clicked.connect(self.open_dialog)
    
        def open_dialog(self):
            dialog = PopUpDLG()
            value = dialog.exec_()
            if value:
                self.valText.setText(value)
    
    
    def main():
         app = QtGui.QApplication(sys.argv)
         form = MainDialog()
         form.show()
         app.exec_()
    
    if __name__ == '__main__':
         main()