我想写一个功能,脚本运行后,桌面上会有3个窗口按钮,运行,配置,退出,点击配置后,会有一个参数配置界面弹出,输入选择完毕后点击确定,弹窗消失,记录该参数到脚本内

已存档
七月CX · 2 个月前
第 1 条补充
·
2 个月前

参数配置窗口内包含 文本输入框 单选框 , 运行,配置,退出按钮是一直显示不会消失的,除非点击退出按钮,帮我优化下

第 2 条补充
·
2 个月前

为什么运行后开始配置退出按钮只是显示1秒就消失了

回答

Hamibot AI
1
· 2 个月前

你可以使用 floaty.window 来创建悬浮窗界面,并监听按钮点击事件。以下是实现这个功能的代码示例:

// 文档地址 https://docs.hamibot.com/
var configValue = ""; // 存储配置参数

// 主悬浮窗
var mainWindow = floaty.window(
    <vertical>
        <button id="runBtn" text="运行"/>
        <button id="configBtn" text="配置"/>
        <button id="exitBtn" text="退出"/>
    </vertical>
);

// 配置窗口 - 初始隐藏
var configWindow = floaty.window(
    <vertical>
        <input id="configInput" hint="请输入配置"/>
        <button id="confirmBtn" text="确定"/>
    </vertical>
);
configWindow.setVisibility("gone");

// 主窗口按钮事件
mainWindow.runBtn.click(function() {
    toast("运行脚本");
    // 执行你的运行逻辑
});

mainWindow.configBtn.click(function() {
    configWindow.setVisibility("visible");
});

mainWindow.exitBtn.click(function() {
    hamibot.exit();
});

// 配置窗口按钮事件
configWindow.confirmBtn.click(function() {
    configValue = configWindow.configInput.getText();
    toast("配置已保存: " + configValue);
    configWindow.setVisibility("gone");
});

// 保持悬浮窗不被关闭
setInterval(function() {}, 1000);

这个脚本会创建两个悬浮窗:

  1. 主窗口有3个按钮:运行、配置、退出
  2. 配置窗口初始隐藏,点击"配置"按钮后才会显示
  3. 在配置窗口输入内容后点击"确定",配置参数会保存到configValue变量中,然后窗口隐藏

注意:

  • setVisibility("gone")用于隐藏窗口
  • 配置参数保存在configValue变量中,后续可以在脚本中使用
  • setInterval用于保持脚本运行

如果你的配置需要更复杂的选择控件,可以在配置窗口中使用<spinner>等组件替代<input>


补充回答 1

// 文档地址 https://docs.hamibot.com/
var configValue = {
    text: "",
    option: 0
};

// 主悬浮窗 - 一直显示
var mainWindow = floaty.window(
    <vertical>
        <button id="runBtn" text="运行"/>
        <button id="configBtn" text="配置"/>
        <button id="exitBtn" text="退出"/>
    </vertical>
);

// 参数配置窗口
var configWindow = floaty.window(
    <vertical padding="16">
        <text text="参数配置" textSize="18sp" marginBottom="8"/>
        <input id="textInput" hint="输入文本参数"/>
        
        <radio-group id="optionGroup">
            <radio text="选项1" value="0" checked="true"/>
            <radio text="选项2" value="1"/>
            <radio text="选项3" value="2"/>
        </radio-group>
        
        <button id="saveBtn" text="保存配置" bg="#4CAF50"/>
    </vertical>
);
configWindow.setVisibility("gone");  // 初始隐藏

// 主窗口事件处理
mainWindow.runBtn.click(function() {
    toast("开始运行,当前配置:\n文本:" + configValue.text + "\n选项:" + configValue.option);
    // 这里执行你的运行逻辑
});

mainWindow.configBtn.click(function() {
    // 显示已保存的配置
    configWindow.textInput.setText(configValue.text);
    configWindow.optionGroup.check(configValue.option);
    configWindow.setVisibility("visible");
});

mainWindow.exitBtn.click(function() {
    mainWindow.close();
    configWindow.close();
    hamibot.exit();
});

// 配置窗口事件处理
configWindow.saveBtn.click(function() {
    // 保存配置
    configValue.text = configWindow.textInput.getText();
    configValue.option = parseInt(configWindow.optionGroup.getCheckedRadioButton().getValue());
    
    toast("配置已保存");
    configWindow.setVisibility("gone");
});

// 保持脚本运行
setInterval(function(){}, 1000);

优化后的脚本特点:

  1. 配置窗口改进

    • 包含文本输入框(<input>)和单选按钮组(<radio-group>)
    • 添加了标题和适当间距
  2. 参数存储优化

    • 使用对象configValue存储两种类型的配置
    • 文本参数在text属性
    • 单选选项在option属性
  3. 窗口管理

    • 主窗口始终显示
    • 配置窗口打开时会显示上次保存的配置
    • 只有点击退出才会完全关闭所有窗口
  4. 运行时可以访问保存的配置

    • 点击运行按钮时会toast显示当前配置
    • 配置保存在全局变量中,随时可用
  5. UI优化

    • 为保存按钮添加了绿色背景
    • 添加了适当的间距布局

要修改配置选项内容或添加更多配置项,只需修改configWindow的布局部分即可。


补充回答 2

这个问题通常是由于脚本线程没有保持运行导致的。在Hamibot中,悬浮窗需要脚本保持运行才能持续显示。以下是改进后的代码,解决了按钮显示一秒消失的问题:

// 文档地址 https://docs.hamibot.com/
var configValue = {
    text: "",
    option: 0
};

// 主悬浮窗 - 使用rawWindow确保持久显示
var mainWindow = floaty.rawWindow(
    <vertical bg="#FFFFFF" padding="8">
        <button id="runBtn" text="运行" w="120" h="60"/>
        <button id="configBtn" text="配置" w="120" h="60"/>
        <button id="exitBtn" text="退出" w="120" h="60"/>
    </vertical>
);

// 使窗口可以被拖动
mainWindow.setTouchable(true);
mainWindow.setPosition(100, 100);

// 配置窗口
var configWindow = floaty.rawWindow(
    <vertical bg="#FFFFFF" padding="16" visibility="gone">
        <text text="参数配置" textSize="18sp" marginBottom="16"/>
        <input id="textInput" hint="输入文本参数" marginBottom="16"/>
        
        <radio-group id="optionGroup" marginBottom="16">
            <radio text="选项1" value="0" checked="true"/>
            <radio text="选项2" value="1"/>
            <radio text="选项3" value="2"/>
        </radio-group>
        
        <button id="saveBtn" text="保存配置" bg="#4CAF50" w="160" h="60"/>
    </vertical>
);
configWindow.setPosition(200, 200);

// 主窗口事件处理
mainWindow.runBtn.click(function() {
    ui.run(function(){
        toast("运行中\n文本:" + configValue.text + "\n选项:" + configValue.option);
    });
    // 这里添加你的运行逻辑
});

mainWindow.configBtn.click(function() {
    ui.run(function(){
        configWindow.textInput.setText(configValue.text);
        configWindow.optionGroup.check(configValue.option);
        configWindow.setVisibility("visible");
    });
});

mainWindow.exitBtn.click(function() {
    ui.run(function(){
        mainWindow.close();
        configWindow.close();
    });
    hamibot.exit();
});

// 配置窗口事件处理
configWindow.saveBtn.click(function() {
    ui.run(function(){
        configValue.text = configWindow.textInput.getText();
        configValue.option = parseInt(configWindow.optionGroup.getCheckedRadioButton().getValue());
        toast("配置已保存");
        configWindow.setVisibility("gone");
    });
});

// 关键改动:使用setInterval保持脚本运行
var keepAlive = setInterval(function(){}, 1000);

改进点说明:

  1. 改用floaty.rawWindow代替floaty.window,因为rawWindow更稳定
  2. 为所有UI操作添加了ui.run包裹,确保在UI线程执行
  3. 添加了setInterval保持脚本持续运行
  4. 设置窗口初始位置和大小,确保可见性
  5. 为按钮添加了固定尺寸,使布局更美观
  6. 窗口设置为可触摸和可拖动

如果仍然出现问题,请检查:

  1. 是否已授予Hamibot悬浮窗权限
  2. 设备是否有其他应用限制悬浮窗显示
  3. 尝试重启Hamibot服务或设备
ℹ️ 本回答由 AI 生成,内容仅供参考