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()
修复说明
- 解决了缩进问题,确保代码符合Python语法规范;
- 替换
intField为textField,支持完整的电话号码输入; - 回调函数通过控件名称获取值,避免了局部变量作用域的问题;
- 重新调整了布局,让所有控件有序排列,不会互相遮挡;
- 增加了基础的电话号码格式验证,提升用户体验。
内容的提问来源于stack exchange,提问作者Slacker TED
相关产品推荐
相关产品推荐

