打开一个新窗口以收集数据并在主窗口中处理它

时间:2017-07-17 13:45:53

标签: python python-3.x pyqt qt5 pyqt5

我有一个主窗口,我使用另一个窗口来获取一些值,我想在主窗口中显示这些值,有点像闹钟如何工作。首先它将为空,然后第二个窗口让您选择时间,然后在完成后,我希望这些数据显示在第一个窗口上。 我希望这与Qmessagebox的工作方式类似。

def Add_new_schedule(self):
    if(self.TABLE_LENGTH == 5):
        self.TOAST_WARNING.setText("LIMIT REACHED!")
    else:
        from Clock import Ui_Clock
        self.CLOCK_WINDOW = Ui_Clock()
        self.CLOCK_WINDOW.show()

在这里,调用时钟窗口,在设置值后,点击按钮“确定”'该信号连接到主窗口中的一个功能。

def Get_clock_values(self, TIME_DETAILS):

    DATA = {}
    DATA['index'] = len(self.DATA_FROM_DB)+1
    DATA['start_time'] = TIME_DETAILS[0]
    DATA['end_time'] = TIME_DETAILS[1]
    DATA['mode'] = TIME_DETAILS[2]
    DATA['node_1'] = True
    DATA['node_2'] = True
    DATA['node_3'] = True
    DATA['node_4'] = True

    self.DATA_FROM_DB.append(DATA)
    self.Clear_table()
    self.Set_table()

DATA_FROM_DB是可用计划的字典列表,我能够在此列表中成功附加新值。 Clear_Table()将现有小部件清除为空白,并且Set_table()应该使用新修改的列表(DATA_FROM_DB)创建新表。 只要没有调用第二个窗口,即在列表中附加一些硬编码值然后修改表,我就能用这个逻辑修改表。但是,使用我当前的代码,表格以其原始状态存在。

1 个答案:

答案 0 :(得分:1)

由于你的问题过于宽泛,我会给你一个例子:

  1. 让主窗口显示按钮和禁用的行。
  2. 按钮使其显示第二个窗口。
  3. 将信息放在第二个窗口的行内。
  4. 第二个窗口的这一行实时更新主窗口中的行。
  5. 发生在signals发射。
  6. 所以你有类似的东西:

    import sys
    from PyQt5.QtCore import pyqtSlot
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWidgets import QLineEdit
    from PyQt5.QtWidgets import QPushButton
    from PyQt5.QtWidgets import QVBoxLayout
    from PyQt5.QtWidgets import QWidget
    
    
    class MainWidget(QWidget):
    
        def __init__(self):
            super(MainWidget, self).__init__()
            self.setFixedSize(500,500)
    
            self.window2 = Window2(self)
    
    
    
            self.btn_show_window2 = QPushButton("Open Window 2")
            self.btn_show_window2.clicked.connect(self.show_window2)
    
            self.layout = QVBoxLayout()
            self.setLayout(self.layout)
    
            self.text_from_window2 = QLineEdit()
            self.text_from_window2.setStyleSheet("color: red;")
            self.text_from_window2.setDisabled(True)
    
            self.layout.addWidget(self.text_from_window2)
            self.layout.addWidget(self.btn_show_window2)
    
        def show_window2(self):
            self.window2.show()
    
        def close(self):
            self.window2.close()
            super(MainWidget, self).close()
    
        @pyqtSlot(str)
        def update_label(self, txt):
            self.text_from_window2.setText(txt)
    
    
    class Window2(QWidget):
    
        def __init__(self, parent):
            super(Window2, self).__init__()
            self.setFixedSize(300,200)
            self.layout = QVBoxLayout()
            self.setLayout(self.layout)
            self.line_edit = QLineEdit()
            self.line_edit.textChanged.connect(parent.update_label)
            self.layout.addWidget(self.line_edit)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        mw = MainWidget()
        mw.show()
        sys.exit(app.exec_())
    

    注意: 您有“百万”方法,这只是您可以遵循的众多方法之一。例如,您可以在第二个窗口中使用另一个按钮,而不是使用textChanged,只有在单击时才会发回文本,就像第一个窗口中的按钮显示第二个按钮一样。