实验队列管理器
该代码实现了一个实验队列管理器,通过图形用户界面(GUI)来显示和控制实验任务队列。使用PyQt6库来构建界面,其中包含按钮和表格,用于管理实验任务。代码主要包括一个类:
ExperimentQ
。类和方法
ExperimentQ
类
ExperimentQ
继承自 QGroupBox
,实现了一个实验队列管理器,显示和控制实验任务队列。
方法:
__init__(self, browser, parent=None, title="Experiment Queue")
:初始化实验队列管理器。browser
:浏览器对象,用于访问属性和实验管理器parent
:父窗口title
:组框标题,默认为"Experiment Queue"- 创建按钮和表格,并设置布局
- 初始化属性
- 设置锁定标志为
False
create_buttons(self)
:创建并配置控制按钮。- 创建暂停按钮、终止按钮、终止所有按钮和重启按钮
- 设置按钮图标、提示信息和点击事件处理函数
init_table_actions(self)
:初始化表格操作。- 创建删除、终止、终止所有、休眠和暂停操作
- 设置操作的快捷键和上下文
- 将操作添加到表格
init_table(self)
:初始化表格。- 创建
QTableView
并设置选择行为、选择模式和上下文菜单策略 - 隐藏垂直表头并设置其调整模式为内容适应
- 初始化
expDict
为一个空字典 - 创建
ScheduleModel
并将其设置为表格模型 - 设置水平表头的调整模式
- 创建
set_model(self, model)
:设置表格的新模型。model
:新的模型对象- 将模型设置为表格模型
delete_clicked(self)
:从队列中删除任务,或者如果任务正在运行则优雅地终止。- 获取选中的行,并获取对应的任务编号
- 如果任务状态为“Running”或“Scanning”,则标记任务为终止
- 否则,从模型中删除任务
- 设置当前索引为选中的行
terminate_clicked(self)
:优雅地终止选中的任务(允许完成运行)。- 获取选中的行,并获取对应的任务编号
- 标记任务为终止,状态设置为“Termination Pending”
- 如果没有选中任务,且模型中有任务,则终止第一个任务
terminate_all(self)
:终止所有任务。- 遍历所有任务,标记为终止,状态设置为“Termination Pending”
set_sleeping(self)
:将选中的任务设置为“Sleeping”状态,或者取消“Sleeping”状态。- 获取选中的行,并获取对应的任务编号
- 如果任务状态为“Sleeping”,则设置为“Queued”,否则设置为“Sleeping”
pause(self)
:暂停当前运行的实验。- 调用浏览器的实验管理器的暂停方法
- 根据实验管理器的暂停状态,切换暂停按钮的图标
update_item(self, k, v)
:更新表格中的项目。k
:键(任务编号)v
:值(任务信息)- 将任务信息更新到模型中,并解锁
delete_item(self, k)
:删除表格中的项目。k
:键(任务编号)- 从模型中删除任务,并解锁
restart(self)
:用于测试按钮的功能。- 设置属性值并进行各种操作,打印结果
代码执行
该代码通过创建 ExperimentQ
对象,并将其嵌入到主窗口中来执行。主窗口中会包含实验队列的表格和控制按钮,用户可以通过这些按钮来控制实验任务的状态。
# 示例代码,展示如何创建并显示 ExperimentQ 对象
if __name__ == "__main__":
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow
app = QApplication(sys.argv)
mainWindow = QMainWindow()
browser = ... # 创建或获取浏览器对象
experimentQueue = ExperimentQ(browser)
mainWindow.setCentralWidget(experimentQueue)
mainWindow.show()
sys.exit(app.exec())