我有一个主窗口,我使用另一个窗口来获取一些值,我想在主窗口中显示这些值,有点像闹钟的工作方式。首先它将是空的,然后第二个窗口允许您选择时间,然后在完成后,我希望这些数据显示在第一个窗口中。 我希望它的工作方式类似于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(。 只要不调用第二个窗口,我就可以使用此逻辑修改表,即在列表中附加一些硬编码值,然后修改表。但是,使用我当前的代码,该表以其原始状态存在。
由于你的问题太宽泛了,我给你举一个例子:
- 主窗口带有按钮和禁用行。
- 该按钮使其显示第二个窗口。
- 将信息放在第二个窗口的行内。
- 第二个窗口的这一行实时更新主窗口中的行。
- 这是通过信号发射发生的。
所以你有这样的东西:
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
之外,您还可以在第二个窗口中使用另一个按钮,并且仅在单击它时才发送文本,就像第一个窗口中的按钮使第二个窗口出现一样。