修改界面¶
这里说的修改和获取界面,指定是界面中的具体内容,而非界面控件本身。也提到过SWidget对象是纯C++对象,它在Python中没有对应的对象(Python object)可以获取或者访问。在TAPython中所有对界面的操作都是通过ChameleonData来实现的
修改内容¶
例如上面例子中的chameleon_gallery.data.set_text(aka_name="IsPythonReadyText", text="Some Changed text")
,我们通过变量aka_name
指定控件名,然后把新的文本传入。
CAUTION
注意不要再非主线程中修改界面。比如threading.Thread(target=target_slate),在另外一个线程中修改界面内容是不允许的。会触发UE的 SLATE_CROSS_THREAD_CHECK
注意2¶
aka_name
在单个ChameleonTool中是需要是唯一的-
设置控件内容时,无需关系控件类型
- 比如,我们可以通过
set_text
给STextBlock设置文本内容,也可以为SButton这是文本内容。实际上STextBlock,SEditableText,SEditableTextBox,SMultiLineEditableText,SMultiLineEditableTextBox,SButton 等都可以通过这个set_text
来设置文本 - 再如,
set_float_value
同时支持对"SSlider"和"SSpinBox"控件
- 比如,我们可以通过
操纵控件¶
除了获取和修改内容,我们也为部分可交互的控件提供了相应的API,比如我们可以通过scroll_to
将SMultiLineEditableTextBox
滚动到我们所需要的位置
类似的还有: - set_scroll_box_offset
TIP
ScrollTo function, for scrolling the scroll bar to the specified location
控制界面显隐¶
Unreal编辑器界面中,有很多动态的界面,实际是通过开关控件的显隐来实现的。如果做过GamePlayUMG的应该能很直观得理解这一点,我们会在做工具之前把用的的界面都做好,然后界面的切换等操作,实际是在控制显隐(Visibility)
Slate控件的显隐有以下5种
Syntax | 可见 | 占用空间 | 可点击 | 子控件可点击 |
---|---|---|---|---|
Visible | Yes | Yes | Yes | Yes |
Collapsed | No | No | No | No |
Hidden | No | Yes | No | No |
HitTestInvisible | Yes | Yes | No | No |
SelfHitTestInvisible | Yes | Yes | No | Yes |
在上面Visible的5个状态中,"Visible" 和 "Collapsed"是最常用的。所有有简化的调用版本。例如在ObjectDetail用 set_collapsed
控制显隐
set_collapsed¶
self.data.set_collapsed(self.ui_rightButtonsGroup, bCollapsed)
set_visibility¶
我们可以通过set_visibility 设置它的状态, 例如Shelf Tool 中就用到它在控制最后一个拖拽框的显隐状态
self.data.set_visibility(self.ui_drop_at_last_aka, "Collapsed")
其他三个状态都和点击事件的响应有关,通常会用来控制多个Overlay的控件哪个是“激活”状态,哪个响应点击。
例如Shelf Tool中,在用户需要修改按钮下方文字的时候,就去掉文本控件的"HitTestInvisible"状态,使得用户可以拖拽文本光标,反之则由下方的按钮响应用户的点击事件:
self.data.set_visibility(self.get_ui_text_name(i), "HitTestInvisible" if bLock else "Visible" )
其他¶
除了内容和显隐的修改,我们还可以修改整个工具窗口的大小,位置等等,具体参考其他工具的控制