You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maya Python脚本技术求助:如何从文本/整数字段获取电话号码?

嘿,我帮你排查下这段Maya Python脚本的问题,修复后应该就能正常运行啦:

代码里的核心问题

  • 缩进错误:Python对缩进要求极其严格,你写的makeTui()函数内部代码完全没有缩进,这会直接触发语法错误,所有函数内的代码都要统一缩进(通常是4个空格)。
  • 控件类型选错了:用intField存电话号码很不合适——电话号码可能带前导零、分隔符(比如-),intField会自动过滤非数字字符,还会丢失前导零,换成textField才是正确选择。
  • 回调函数绑定有问题:你用字符串形式的command='num_callback()'会导致变量作用域冲突,而且num变量是makeTui()内部的局部变量,num_callback()默认访问不到它;正确的做法是直接传递函数对象(不带括号),或者通过控件名称来获取值。
  • 布局混乱:你创建的"Phone Number"标签没有设置布局规则,会直接挡在输入框前面,其他控件的附着位置也不够合理。

修复后的完整代码

import maya.cmds as cmds

def makeTui():
    # 先清理已存在的同名窗口
    if cmds.window('window2', q=True, ex=True):
        cmds.deleteUI('window2')
    
    # 创建带菜单栏的窗口
    cmds.window('window2', menuBar=True)
    main_form = cmds.formLayout('formLayout1')
    
    # 电话号码标签与输入框
    phone_label = cmds.text(label='Phone Number')
    # 用textField替代intField,支持完整电话号码格式
    phone_field = cmds.textField('phoneTextField', width=120, height=20, changeCommand=num_callback)
    
    # 运营商标签与下拉菜单
    provider_label = cmds.text(label='Service Provider')
    provider_menu = cmds.optionMenu('optionMenu1')
    cmds.menuItem(label='AT&T')
    cmds.menuItem(label='Verizon')
    cmds.menuItem(label='Sprint')
    cmds.menuItem(label='Cricket')
    cmds.menuItem(label='T-Mobile')
    
    # 提交按钮
    submit_btn = cmds.iconTextButton(parent=main_form, image='render.png', command=num_callback)
    
    # 完善布局,让控件有序排列
    cmds.formLayout(main_form, edit=True,
        attachForm=[
            (phone_label, 'left', 20),
            (phone_label, 'top', 20),
            (phone_field, 'left', 130),
            (phone_field, 'top', 18),
            (provider_label, 'left', 20),
            (provider_label, 'top', 50),
            (provider_menu, 'left', 130),
            (provider_menu, 'top', 48),
            (submit_btn, 'left', 130),
            (submit_btn, 'top', 80)
        ])
    
    cmds.showWindow('window2')

def num_callback(*args):
    # 通过控件名称获取输入的电话号码
    phone_num = cmds.textField('phoneTextField', q=True, text=True)
    print(f"当前输入的电话号码: {phone_num}")
    
    # 可选:添加简单的格式验证
    if len(phone_num) == 10 and phone_num.isdigit():
        print("✅ 电话号码格式有效")
    elif phone_num == "":
        print("⚠️ 请输入电话号码")
    else:
        print("❌ 请输入10位纯数字的电话号码")

# 启动UI
makeTui()

修复说明

  1. 解决了缩进问题,确保代码符合Python语法规范;
  2. 替换intField为textField,支持完整的电话号码输入;
  3. 回调函数通过控件名称获取值,避免了局部变量作用域的问题;
  4. 重新调整了布局,让所有控件有序排列,不会互相遮挡;
  5. 增加了基础的电话号码格式验证,提升用户体验。

内容的提问来源于stack exchange,提问作者Slacker TED

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:03