输入框(textbox)

V2.3新增,用于替换原来的 data 的一部分

功能

显示、修改系统数据和KUI自定义变量

支持的数据

  • 诊断参数 K/D/T/C/X/Y/R/S/F/G,支持位型/字节型参数(诊断参数的非位型数据可以设置数据类型,共6种,u8/u16/u32/s8/s16/s32,s表示有符号数,u表示无符号数,数字表示数据的位数,默认为u8。形式为xxx[type],如K8[u16],表示K区8号参数,无符号16位)
  • 宏变量 支持系统宏变量,格式为#500#500$2,其中$2代表主通道2。
  • 系统参数 格式可为P414, P415[1],P1105.1[1]。中括号内容[n]代表轴号或通道号,根据具体参数区分,可以是一个数字,也可以是一个变量或者表达式。例如P415[D1],则轴号由"D1"决定。
  • 伺服参数 支持伺服参数PA,ZA-ZF/ZP,写法为PA1[3],中括号内可以是一个数字,也可以是一个变量或者表达式。例如PA1[D1],则轴号由"D1"决定。
  • KUI自定义变量 自定义变量名称可以为小写字母或小写字母+数字,不支持大写字母,为了区别于系统数据,将自定义变量包含在大括号{}内,形如{v1},非保持型变量,在{}前加两个下划线 "__" ,形如__{v1}
  • 可变变量 格式可为select{D10, (1,D11),(2, D12)},当D10的值不为1或2时控件的值显示为0,且不可捕获焦点。应该避免这样的情况发生。
  • 系统内部数据 目前支持的内部数据有:主轴原始角度__sp_angle_pos[xxx]$n、当前反馈速率__act_feed_speed$n、程序列表信息__prog_list_info[x]、U盘列表信息__usb_list_info[x]、负载绝对值__axis_torque[n]
    # D区参数,数据类型为u32
    textbox("D12[u32]",(1, 1, 30, 150))
    
    # 宏变量,符号$和@用于区分主通道和辅助通道,@为辅助通道,$为主通道
    textbox("#500$2",(41, 1, 30, 150))
    
    # 系统参数,区分位型参数和字节型参数
    textbox("P1105.5[1]",(81, 1, 30, 150))
    
    textbox("P610[1][u32]",(121, 1, 30, 150))
    
    # 伺服参数
    textbox("PA5[3]",(161, 1, 30, 150))
    
    # KUI自定义变量,控件中命名为{value},脚本中若使用此变量,则写为#value
    textbox("{value}",(201, 1, 30, 150))
    
    # 可变变量,根据D10的值选择对应的变量
    textbox("select{D10, (1, D11),(2, D12)}",(241, 1, 30, 150))
    
    # 内部变量,通道1的反馈速率
    textbox("__goal_count",(281, 1, 30, 150))

注:主轴号或通道号无效时显示数据为0。不支持多通道的系统软件会忽略$n。

参数

  • 控件地址: 描述的数据,此参数类型为字符串,写作 " #500 "
  • 位置大小: 控件所在位置及所占空间大小,此参数类型为元组,写作 (a, b, c, d) 其中a/b/c/d都应该是正整形值分别表示控件的 起始行/起始列/所占行数/所占列数,其中c/d可以省略,省略时值均为1。
  • 颜色和背景色(不设为默认值)
  • 字体大小(不设为默认值)
  • 读写模式:取值可以为 确认/只读,此参数可以省略,默认为 确认,此参数非字符串类型,写作 只读
  • 边框格式:取值可为 隐藏/不隐藏,此参数可以省略,默认为不隐藏,此参数类型非字符串,写作 隐藏,会隐藏控件四周的线框。
  • text_align: 文本显示位置,例如:text_align=居中
  • old_data_align: 原值显示位置,支持的类型有自动/居上/居下,例如:old_data_align=自动
  • enable表达式:当该表达式值不为0时该控件才可以修改,等于0时控件不捕获光标,故不能修改。若不设置该参数,则可以修改。此参数为字符串类型,写作enable="#100",则只有当#100不等于0时才可以修改。(此参数仅在 确认 模式下有用)
  • id: 控件名称,用于标识控件,控件名称不可重复,如果不需要可以不设置,此参数可以为数字或中英文字符串,写作 id="page1"id=1
  • action:为响应动作,可以通过设置action参数实现为data控件输入值时执行相应的动作,action取值可以为 运行脚本/运行脚本文件/程序段模板 ,在 确认 模式下使用。
    • 运行脚本:语法为:action=运行脚本("xxx"),括号中的字符串为符合KUI脚本语法的若干语句。当操作者手动改变控件数据值时,将执行这些语句。
    • 运行脚本文件:语法为:action=运行脚本文件("xxx.prg"),括号中的字符串为KUI脚本文件名称,文件需放到当前目录下或写入绝对路径。当操作者手动改变控件数据值时,将执行此文件。
    • 程序段模板:语法为:action=程序段模板('''xxx'''),括号中的字符串为一个程序模板段,当操作者手动改变控件数据值时,将以其为模板生成程序段,插入当前光标之后。程序模板段可以包含任意符合KUI脚本语法的语句和一些会生成程序的模板语句,模板语句中的字符在生成程序时不变,变量则用其值来替代。例如 ’’’ G01 X#500’‘‘在生成程序时(假设#500值为100),会生成程序"G01 X100;"。
  • password: 修改控件中的数据需要的密码id,需配合set_password()函数使用。此参数为字符串类型,写作 password=1,此时首次修改此控件数据时,需要输入密码"xxx",否则无法修改。
  • focus_in: 光标进入该控件时所触发的动作或动作列表,例如:focus_in=表达式("#500=10")
  • focus_out: 光标退出该控件时所触发的动作或动作列表,例如:focus_out=表达式("#500=0")
  • 光标顺序: left左边控件,right右边控件,prev上一控件,next下一控件(对应数控系统面板上的 “左”/“右”/“上”/“下"按键),当需要设置控件的光标顺序时将对应控件的id赋值给相应参数即可,4个参数可以设置0个或多个。此参数为字符串类型或数字类型,取决于跳转到的控件的id,写作 left="LA"left=1,则按系统面板上的"左"按键时,id为"LA”/1 的控件捕获光标。
  • min: 从此控件输入数据值时的最小值,小于此值时会报错,操作无法完成,写作 min=1
  • max: 从此控件输入数据值时的最大值,大于此值时会报错,操作无法完成,写作 max=1。(如果同时设置max和mix两个参数,则需要满足条件 “max >= min”,否则报错)(min和max两个参数仅限制从控件改变值时的输入范围,如果控件绑定的是系统变量,如宏变量#500,则当#500的值超出范围时可以正确显示,这两个参数为特定需求的情况设计,无特殊需求勿用,以免造成不必要的困扰)
  • min_length: 从此控件输入数据值时的最小长度,长度小于此值时会报错,操作无法完成。小数点和数字的长度都为1,写作 min_length=1
  • max_length: 从此控件输入数据值时的最大长度,长度大于此值时会报错,操作无法完成。小数点的长度为1,写作 max_length=1。(如果同时设置max_length和mix_length两个参数,则需要满足条件"max_length >= min_length",否则报错)(min_length和max_length两个参数仅限制从控件改变值时输入值的长度范围,如果控件绑定的是系统变量,如宏变量#500,则当#500的值超出长度范围可以正确显示,这两个参数为特定需求的情况设计,无特殊需求勿用,以免造成不必要的困扰)
  • anyof: 限制从此控件输入数据值时的所有值,用法为 anyof=[12, 13, 14],此时从控件输入数值时必须是12/13/14中的一个,否则报错,操作无法完成。
  • noneof: 限制从此控件输入数据值时不可取的所有值,用法为 noneof=[12, 13, 14],此时从控件输入数值时不能是12/13/14中的一个,否则报错,操作无法完成。(anyof和noneof两个参数仅限制从控件改变值时输入值的范围,如果控件绑定的是系统变量,如宏变量#500,则当#500的值超出范围可以正确显示,这两个参数为特定需求的情况设计,无特殊需求勿用,以免造成不必要的困扰)
  • data_type: 限制从此控件输入数据值时的类型,可取的值共有三种类型 ‘int’/‘uint’/‘float’,分别代表 有符号整形/无符号整形/浮点型, 写作 `data_type=‘int’,则从此控件输入的数值仅可以是有符号整形,输入浮点型时报错。(此参数仅限制从控件改变值时输入值的类型,如果控件绑定的是系统变量,如宏变量#500,则当#500的类型与此参数不符时也可以正确显示,此参数为特定需求的情况设计,无特殊需求勿用,以免造成不必要的困扰)
  • format: 对数值的显示进行格式化,格式为 format="%xxx" ,是C语言库函数printf的子集,目前仅支持几种简单的格式化,在下面列出。使用此参数时,必须使用data_type参数,且此时参数的格式化需要与data_type类型相对应。格式化时不会改变变量的值,但会改变其显示形式。一些情况可能会导致显示的值与变量真实值不符。(使用此参数时你需要明确知道你在做什么,并且不会给自己和用户带来困扰)。下面是目前支持的格式化形式。
    • textbox("{v1}", (1, 1), format="%.nf", data_type=‘float’) 此时将数据格式化为浮点型,n为正整形数值,此时控件会显示n位小数,剩余小数部分按四舍五入处理。此时必须设置data_type参数为’float’。".n"可以省略,省略时默认显示6位小数。例如:显示三位小数点textbox("{v1}", (1, 1, 30, 150), format="%.3f", data_type='float')
    • textbox("{v1}", (1, 2), format="%0nd", data_type=‘int’) 此时将数据格式化为带符号整形,n为正整形数值,此时控件中数据宽度为最小为n,左侧用0补齐,此时必须设置data_type参数为’int’或’uint’。“0n"可以省略,此时没有最小宽度限制。例如:显示有符号整数,宽度为4,左侧用0补齐textbox("{v1}", (1, 1, 30, 150), format="%04d", data_type='int')
    • textbox("{v1}”, (1, 3), format="%0nu", data_type=‘uint’) 此时将数据格式化为无符号整形,n为正整形数值,此时控件中数据宽度为最小为n,左侧用0补齐,此时必须设置data_type参数为’uint’。“0n"可以省略,此时没有最小宽度限制。例如:显示无符号整数,宽度为4,左侧用0补齐textbox("{v1}", (1, 1, 30, 150), format="%04d", data_type='int')
  • soft_keyboard: 设置虚拟键盘类型ID,支持系统键盘/无键盘,例如:soft_keyboard=系统键盘
  • rect_no_c: 禁止自动改变控件大小(例如文本框等控件会根据字体自适应高度或宽度,设置后则禁止这些自适应的功能)
  • visible: 是否显示:不显示visible=0

注:参数min/max/min_length/max_length/anyof/noneof/data_type都对数值变量的值进行了不同程度的限制,当输入的值不符合要求时控件会处于一种 未完成的状态,此时需要继续设置值或按"复位"来恢复控件操作前的状态,如果控件处于未完成状态时移动光标,此时控件中的数值会处于控件左侧,显示的值与实际 值不符。

示例

  1. 此控件的基础用法用于显示、编辑某一变量或系统参数的值,可根据需要设置控件的读写模式、线框格式、数据格式、颜色背景色等属性。
  2. action参数使操作此控件时机床能执行设定的"动作”。 例如:当数值被输入确定后执行动作action=表达式("#900=999")、光标移到控件时执行动作focus_in=表达式("#509=#509+1")、光标离开控件时执行动作focus_out=表达式("#509=#509-1")
  3. 可利用python自带for循环语言批量生成有一定规则的控件,见下图指令。

textbox

with page(456, 800, id="page1", text=(白色, f20x10, 居中), bg_color=(24, 24, 24)):

    # 简单用法,编辑宏变量、参数、自定义变量、可变变量
    textbox("#500", (1, 1, 30, 150))
    textbox("P610[1][u32]", (41, 1, 30, 150))
    textbox("{value}", (81, 1, 30, 150))
    textbox("select{D10, (1, D11),(2, D12)}", (121, 1, 30, 150))

    # 字体颜色和字体对齐方式
    textbox("#500", (161, 1, 50, 150), 红色, text_align=居中, rect_no_c=1, soft_keyboard=无键盘)

    # 边框设置,其中border_sizez仅支持v7.1
    textbox("#501", (241, 1, 50, 150), border_visible=1, border_color=红色, border_size=3, rect_no_c=1)

    # 背景色和控件圆角设置
    textbox("#502", (321, 1, 50, 150), f28x14, 黄色, text_align=居中, border_visible=0, radius=20, bg_color=(145, 145, 145), rect_no_c=1)

    # 可变文字颜色和背景颜色
    textbox("#503", (401, 1, 50, 150), fg_expr="#504", fg_map={0:白色, 1:绿色}, bg_expr="#504", bg_map={0:深灰色, 1:(85, 85, 85)}, rect_no_c=1)

    # #505设置为浮点数,并且显示小数点后三位
    textbox("#505", (1, 200, 30, 150), data_type="float", format="%.3f")

    # #505设置为正整数,显示四位数字
    textbox("#505", (41, 200, 30, 150), data_type="uint", format="%04d")

    # #505设置为正整数,显示四位数字
    textbox("#506", (81, 200, 30, 150), noneof=[1, 2], min=0)

    # #507设置最小和最大长度,并且触发动作
    textbox("#507", (121, 200, 30, 150), min_length=1, max_length=5, action=表达式("#900=999"))

    # 绑定密码等级,输入密码后修改#508数值
    textbox("#508", (161, 200, 30, 150), password=1)

    # #509宏变量,光标进入时候执行表达式#509=#509+1,光标离开时执行表达式#509=#509-1
    textbox("#509", (201, 200, 30, 150), id="id_509", focus_in=表达式("#509=#509+1"), focus_out=表达式("#509=#509-1"))

    # 设置光标移动顺序, left左边控件,right右边控件,prev上一控件,next下一控件
    textbox("#510", (241, 200, 30, 150), id="id_510", prev="id_509", next="id_511")
    textbox("#511", (281, 200, 30, 150), id="id_511", prev="id_510")

    # 使用循环,生成多个输入框
    for i in range(10):
        textbox(f"#{600+i}", (1+i*40, 400, 30, 150))

    menu("第一页", "page1")