找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 272|回复: 4

[教程] 同一界面多输入框切换

[复制链接]
发表于 2024-10-7 15:49:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 大以巴狼DJ 于 2024-10-7 16:00 编辑

大家好,第一次分享教程,本次教程的主要内容是:
同一界面内显示多个输入框

----------------------------------------------------------------------------------------------
本教程代码要实现的效果是:
- 同一界面中显示多个输入框
- 点击哪个输入框就激活哪个输入框
- 在对应的输入框按下键盘enter键,可将输入框中的文字传到对应的变量上
- 在输入框中有文字时,按下确认键,将输入框中的文字传到对应的变量上

- 最重要的效果是:在实现上述效果的前提下,尽量减少全局变量和if语句的使用
----------------------------------------------------------------------------------------------
下面是几个平时也许容易被大家忽视的内容:
- 1.input可以写在button中
- 2.官方 InputValue 类自带了 Toggle() 函数
----------------------------------------------------------------------------------------------
为方便学习及使用,本教程代码尽量仅保留必要部分,删去了格式相关的多余内容。
排版格式有关的几个参数为:
frame:下面三个参数控制窗口的位置,大小,边距
  pos
  xysize
  padding
spacing:控制元件之间的间距
yalign 0.5:当按钮和文字同一行时,使它们纵向居中对齐
----------------------------------------------------------------------------------------------

希望各位使用愉快~

界面部分代码:

[RenPy] 纯文本查看 复制代码
## =========================================================================
## 同界面多输入框切换
## =========================================================================

## 传出屏幕的全局变量
default confirm_family_name = ''
default confirm_first_name = ''


screen input_sample():
    ##--------------------------
    ## 初始化界面变量
    ##--------------------------
    ## 初始化各输入框的默认输入值
    default input_family_name = '布洛'
    default input_first_name = '芬子'
    ## 初始化各输入框获得焦点后执行语句
    default focus_input_family_name = ScreenVariableInputValue('input_family_name')
    default focus_input_first_name = ScreenVariableInputValue('input_first_name')
    ## 在对应的输入框按下输入键后传入文本的变量
    ## - NOTE:enter
    ## - 不需要按下输入键后有对应操作的,把所有带NOTE:enter标记的部分删掉
    ## - 如果需要改成全局变量,自行修改NOTE:enter标记的部分
    default enter_family_name = '布洛'
    default enter_first_name = '芬子'

    tag menu

    ## 编辑姓名窗口
    frame:
        pos (300, 100)
        xysize (450, 300)
        padding(10, 10)
        vbox:
            spacing 15
            hbox:
                spacing 15
                text '姓名:'
                ## NOTE:enter
                ## - 按下enter键后才会显示的文本
                text '[enter_family_name][enter_first_name](按下enter生效)'
            hbox:
                spacing 15
                text '姓氏' yalign 0.5
                button:
                    yalign 0.5
                    action focus_input_family_name.Toggle()
                    input:
                        value focus_input_family_name
                        ## NOTE:enter
                        ## - 按下enter键后执行的行为,如要删掉需连上面default的NOTE:enter变量一起删掉
                        action SetScreenVariable('enter_family_name', input_family_name)
            hbox:
                spacing 15
                text '名字' yalign 0.5
                button:
                    yalign 0.5
                    action focus_input_first_name.Toggle()
                    input:
                        value focus_input_first_name
                        ## NOTE:enter
                        ## - 按下enter键后执行的行为,如要删掉需连上面default的NOTE:enter变量一起删掉
                        action SetScreenVariable('enter_first_name', input_first_name)
            hbox:
                ## 按下确定键后,将姓名变量设为“当前输入框中的值”
                ## - 如果需要设为enter后的值,将input_family_name,input_first_name改为enter开头的两个变量
                textbutton '确定' action [SetVariable('confirm_family_name', input_family_name),
                                        SetVariable('confirm_first_name', input_first_name),
                                        ]
    
    ## 这个窗口拿来看确认后的效果
    if confirm_family_name:
        frame:
            pos (300, 450)
            xysize (450, 100)
            padding(10, 10)
            text '角色姓名更改为:[confirm_family_name][confirm_first_name]'


可在 label start: 中添加如下代码查看本教程界面效果:
[RenPy] 纯文本查看 复制代码
label start:

    call screen input_sample


界面效果截图

界面效果截图




评分

参与人数 2活力 +600 干货 +6 收起 理由
被诅咒的章鱼 + 300 + 3 感谢分享!
blackpineapple + 300 + 3 感谢分享!

查看全部评分

发表于 2024-10-7 16:03:36 | 显示全部楼层
感谢!很实用!
回复 支持 抱歉

使用道具 举报

发表于 2024-10-15 14:24:00 | 显示全部楼层
大佬,请问这个确认名字的窗口就是单纯弹窗吗?请教下是否可以变成二次确认那种?就是“确定名字为...吗?”
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2024-10-30 13:12:13 | 显示全部楼层
q9526431 发表于 2024-10-15 14:24
大佬,请问这个确认名字的窗口就是单纯弹窗吗?请教下是否可以变成二次确认那种?就是“确定名字为...吗? ...

可以的呀,这只是个基本框架,你需要二次确认就把确认按钮的action改成 Confirm(),然后Confirm的yes=那里把现在的确认按钮action粘贴进去就好了
回复 支持 抱歉

使用道具 举报

发表于 昨天 10:36 | 显示全部楼层
大以巴狼DJ 发表于 2024-10-30 13:12
可以的呀,这只是个基本框架,你需要二次确认就把确认按钮的action改成 Confirm(),然后Confirm的yes=那 ...

原来如此,我去试试,感谢大佬指点
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2024-11-15 12:10 , Processed in 0.111641 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表