2017-10-07 104 views
0

我製作了一個UI,其中包含一個主窗口和一個打開對話框窗口的按鈕。我想將當前文本改變的信號從對話窗口中的行編輯作爲變量發送到Mainwindow類。我正在製作的代碼示例如下:如何將信號從QDialog發送到QMainWindow類

from PyQt5 import QtCore, QtGui, QtWidgets 
from selenium import webdriver 
import time 
import threading 
from bs4 import BeautifulSoup as soup 
import requests 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(388, 179) 
     self.lineEdit_2 = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit_2.setGeometry(QtCore.QRect(100, 100, 271, 21)) 
     font = QtGui.QFont() 
     font.setFamily("Yu Gothic") 
     self.lineEdit_2.setFont(font) 
     self.lineEdit_2.setStyleSheet("background-color: transparent;\n" 
"color: rgb(255, 255, 255);") 
     self.lineEdit_2.setObjectName("lineEdit_2") 

class Dialog(QtWidgets.QDialog, Ui_Dialog): 
    def __init__(self, parent=None): 
     QtWidgets.QDialog.__init__(self, parent) 
     self.setupUi(self) 

     # self.pushButton.pressed.connect(self.textEdit.clear) 
     # self.pushButton.pressed.connect(self.sejd) 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     self.keyworddict = {} 
     self.count = {} 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(803, 538) 
     MainWindow.setMinimumSize(QtCore.QSize(0, 0)) 
     MainWindow.setMaximumSize(QtCore.QSize(10000, 10000)) 
     self.centralWidget = QtWidgets.QWidget(MainWindow) 
     self.centralWidget.setObjectName("centralWidget") 
     self.pushButton = QtWidgets.QPushButton(self.centralWidget) 
     self.pushButton.setGeometry(QtCore.QRect(180, 210, 75, 23)) 
     font = QtGui.QFont() 
     font.setFamily("Yu Gothic") 
     font.setBold(True) 
     font.setWeight(75) 
     self.pushButton.setFont(font) 
     self.pushButton.setObjectName("pushButton") 
     MainWindow.setCentralWidget(self.centralWidget) 

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None): 
     QtWidgets.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 

     self.pushButton.pressed.connect(self.on_Button_clicked) 

    def on_Button_clicked(self): 
     dialog = QtWidgets.QDialog() 
     dialog.ui = Ui_Dialog() 
     dialog.ui.setupUi(dialog) 
     dialog.setWindowTitle("Login") 
     dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
     dialog.exec_() 

if __name__ == "__main__": 
    import sys 

    app = QtWidgets.QApplication(sys.argv) 
    w = MainWindow() 
    w.setWindowTitle("ui") 
    w.show() 
    sys.exit(app.exec_()) 

所有幫助表示讚賞。我最好喜歡使用上面的代碼的例子。

回答

1

至少有兩種簡單的方法可以做到這一點。您可以連接一個信號,創建對話框時,或者只是檢索文本對話框關閉後:

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): 
    ... 

    def dialogTextChanged(self, text): 
     print(text) 

    def on_Button_clicked(self): 
     dialog = QtWidgets.QDialog() 
     dialog.ui = Ui_Dialog() 
     dialog.ui.setupUi(dialog) 
     # connect signal to slot 
     dialog.ui.lineEdit_2.textChanged.connect(self.dialogTextChanged) 
     dialog.setWindowTitle("Login") 
     # this is not needed 
     # dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
     dialog.exec_() 
     # or retrieve text after dialog closes 
     print(dialog.ui.lineEdit_2.text()) 
     dialog.deleteLater() 

如果這是一個登錄對話框,你應該有一個接受按鈕連接到對話框的accept()插槽。然後,您可以檢查對話框的退出狀態,如下所示:

if dialog.exec_() == QtWidgets.QDialog.Accepted: 
    text = dialog.ui.lineEdit_2.text() 
    # do sothing with text ... 
dialog.deleteLater()