如何创建无法关闭的Jython JFrame?适配TopSpin脚本防误操作
为TopSpin创建不可关闭的Jython弹窗防止数据集切换
完全理解你的痛点——运行耗时的TopSpin NMR数据采集/处理脚本时,要是不知情的工作人员切换了数据集,很容易搞砸整个流程,普通弹窗又太容易被随手关掉。下面是专门针对这个需求的实现方案:
核心实现思路
- 自定义JFrame弹窗,重写窗口关闭逻辑,彻底禁用关闭按钮
- 让弹窗始终置顶显示,确保它不会被TopSpin主窗口遮挡
- 添加清晰醒目的提示文本,明确告知当前不能进行数据集切换操作
完整代码示例
from java.awt import Label, BorderLayout, Font from javax.swing import JFrame class UnclosableScriptRunningFrame(JFrame): def __init__(self): super(UnclosableScriptRunningFrame, self).__init__("TopSpin脚本运行中") # 关键设置:禁用窗口关闭功能 self.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) # 弹窗始终置顶,保持在TopSpin界面最上层 self.setAlwaysOnTop(True) # 禁止调整窗口大小,避免提示文本被遮挡 self.setResizable(False) # 添加醒目的提示标签 alert_label = Label("⚠️ 重要提示:脚本正在运行,请勿切换数据集!", Label.CENTER) alert_label.setFont(Font("Arial", Font.BOLD, 14)) self.getContentPane().add(alert_label, BorderLayout.CENTER) # 设置窗口大小并居中显示 self.setSize(450, 160) self.setLocationRelativeTo(None) # 脚本启动时显示弹窗 running_alert = UnclosableScriptRunningFrame() running_alert.setVisible(True) # ---------------------- # 这里放入你的耗时NMR数据处理/采集代码 # 例如: # run_nmr_acquisition() # process_nmr_data() # ---------------------- # 脚本执行完成后,手动关闭弹窗 running_alert.dispose()
关键代码说明
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE):这是实现不可关闭的核心,点击窗口右上角的关闭按钮时不会有任何响应,彻底阻止用户关闭弹窗setAlwaysOnTop(True):确保弹窗始终显示在TopSpin主窗口上方,不会被遮挡,时刻提醒所有人当前脚本在运行- 固定窗口大小+居中显示:让弹窗位置醒目,不会被随意移动或调整,保证提示信息始终清晰可见
额外注意事项
- 务必在脚本执行完毕后调用
dispose()关闭弹窗,否则弹窗会一直停留在界面上 - 如果需要,可以扩展弹窗添加进度条或实时状态文本,让用户了解脚本运行进度
- TopSpin原生支持Jython与Java Swing组件的交互,这段代码可以直接在TopSpin的脚本编辑器中运行测试
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

