使用PyQt从子级获取数据

时间:2016-05-18 14:12:50

标签: python pyqt parent-child

我正在构建一个打开QDialog的简单应用程序,并且从属于该子代的QComboBox,我可以选择一个项目并查看一些信息。我需要做的是从comboBox(或该孩子的其他数据)获取所选项目显示的一些信息。

这是我用来打开子窗口小部件的代码:

class Window(QMainWindow):
  def __init__(self):
    #A lot of stuff in here

  #I connect a QPushButton to this method to open the child
  def Serial_connection(self, event):
    configurePort.ConfigurePort(self).show()

这是孩子的代码:

class ConfigurePort(QDialog):
  def __init__(self, parent = None):
    QDialog.__init__(self, parent)
    uic.loadUi("configurePort.ui", self)

    self.initUi()

  def initUi(self):
    self.comboBox.activated[str].connect(self.Selected)
    self.label.hide()

  def Selected(self, text):
    if text == "option 1":
      self.label.setText("Option 1 selected")

现在,从Selected方法,我需要获取文本:"选择选项1"并将其发送给父(QMainWindow)以使用此信息做另一件事。

我该怎么做?如何从孩子那里检索数据?希望你能帮帮我。

1 个答案:

答案 0 :(得分:1)

通常,当您使用临时对话框从用户获取信息时,对话框应为模态,因此您可以阻止所有其他操作,直到用户完成对话框。它还允许您像对待函数一样调用对话框,并从中获取结果。

以下是返回文本结果的模式对话框的示例。

class ConfigurePort(QDialog):
    def __init__(self, parent = None):
        QDialog.__init__(self, parent)
        uic.loadUi("configurePort.ui", self)

        self.initUi()

    def initUi(self):
        self.comboBox.activated[str].connect(self.Selected)
        self.label.hide()

    def Selected(self, text):
        if text == "option 1":
            self.label.setText("Option 1 selected")

    def getLabelText(self):
        return self.label.text()

    @classmethod
    def launch(cls, parent=None):
        dlg = cls(parent)
        dlg.exec_()
        text = dlg.getLabelText()
        return text


class Window(QMainWindow):
    ...
    def Serial_connection(self, event):
        text = configurePort.ConfigurePort.launch(self)
        print text