无法让 lineEdit 在主框架中更新

Cannot get lineEdit to update in main frame

我有一个主 window,它有一个选项选项卡,允许用户更新他们的输入文件和主目录。此函数为用户可能拥有的项目的每个给定配置文件更新一个文本文件。所有这些功能都很好用.. lineEdits 在 __init__ 中首次执行时显示正确的目录 ...除了将更改反映到主要 window 上的 lineEdits 的事实之外制作。

class MAIN_GUI(QtGui.QMainWIndow):
    def __init__(self):
        super(MAIN_GUI,self).__init__()
        self.uiM=Ui_MainWindow()
        self.uiM.setupUi(self)
        self.update_dir_lines()
        self.connect(self.uiM.Options_ChangeButton,QtCore.SIGNAL("clicked()"),self.choose_DIR)

    def choose_DIR(self):
        choose_DIR = Choose_DIR(current_profile,'main')
        choose_DIR.show()
        choose_DIR.exec_()

    def update_dir_lines(self):
        #pull the saved file directory from the profile.txt
        self.InputFileDir = str(profile.get_dir('InputFileDir'))
        self.uiM.Options_InputDIR_lineEdit.setText(self.InputFileDir)
        #just to see that it's been changed print into console
        print self.uiM.Options_inputDIR_lineEdit.text() #this actually comes back with the changed directory
        #same spiel for the home directory so no need to repeat

class Choose_DIR(QtGui.QDialog):
    def __init__(self):
        super(Choose_DIR,self).__init__()
        self.ui3=Ui_Directories()
        self.ui3.setupUi(self)
        self.connect(self.ui3.Options_InputFileDir_BrowseButton,QtCore.SIGNAL("clicked()"),self.get_InputFileDir)
        #doing the same for the home dir so no need to repeat

    def get_InputFileDir(self):
        QString_dir = QFileDialog.getExistingDirectory(parent=None,caption=("Choose InputFile Directory"),directory(''),optins=QFileDialog.ShowDirsOnly)
        self.ui3.Options_InputFileDir_lineEdit.setText(QString_dir) #this works perfectly reflecting the chosen input File Dir
        self.connect(self.ui3.select_DIR_ExecuteButton,QtCore.SIGNAL("clicked()"),self.change_DIR)
    def change_DIR(self):
        InputFileDir = self.ui3.Options_InputFileDir_lineEdit.text()
        #profile is being edited and saved
        profile.change_dir('InputFileDir',InputFileDir) 
        self.go2main()

    def go2main(self):
        self.close()
        main = MAIN_GUI()
        QtCore.QTimer.singleShot(1000,main.update_dir_lines)

我认为最后一个函数不是转到主 window 而是创建主 window 的另一个实例但没有显示因为我没有用 main.show() 告诉它但我不知道如何向主 GUI 发送正确的信号以刷新 lineEdits...我知道文本已设置,因为控制台正在打印出 lineEdits 更改为的正确目录,但 lineEdits 本身不反映那。我尝试使用 QApplication.instance().processEvents(),但我认为它不起作用。我将它与 update_dir_lines 函数一起使用,它只是终止了主 GUI。谁能帮帮我?

当您使用 exec_() 打开对话框时,它将一直阻塞,直到用户将其关闭。所以解决方法很简单:

class MAIN_GUI(QtGui.QMainWIndow):
    ...

    def choose_DIR(self):
        choose_DIR = Choose_DIR(current_profile,'main')
        if choose_DIR.exec_() == QtGui.QDialog.Accepted:
            self.update_dir_lines()

不再需要go2main()方法,所以你可以这样做:

class Choose_DIR(QtGui.QDialog):
    ...

    def change_DIR(self):
        InputFileDir = self.ui3.Options_InputFileDir_lineEdit.text()
        #profile is being edited and saved
        profile.change_dir('InputFileDir',InputFileDir) 
        self.accept()