在官方的一个 讨论帖 里, 有人问到 textual 能否实现类似于 "页面切换" 的效果, 即, 限定在一个容器视图里, 通过 push_view 和 pop_view 这样的操作, 完成容器内的元素的切换.
用类比的方式来说明, 就是像 android 系统设置里, 点击选项进入次级页面, 点击返回按钮就回到上级页面; 也比如像 qt qml 的 SwipeView, 在它里面可以放置多个页面组件, 通过 currentIndex 来切换.
那么 textual 是否具有这样的能力呢?
很遗憾, 到目前为止 (2022-05), 笔者暂未找到合适的方法.
同样在这个讨论帖里, 有人给出了一个 临时解决方案.
这个临时解决方案的思想是, 考虑到 push_view 和 pop_view 方法是由 App 提供的, 也就是说要想 push_view 或 pop_view, 必须把 整个屏幕 的所有组件都替换一遍, 而不是只针对要变化的容器 view 操作.
因此该回答者预先把整个屏幕的元素, 按照不同的切分场景, 制作成一个个 view stack (在他的代码里叫做 "scenes"), 每个 view stack 都包含同样的 header, footer 等不变的元素, 以及唯一变化的元素 (容器里的待切换页面). 有多少个待切换的页面, 就有多少种 view stack.
App 在执行 push_view 或 pop_view 时, 会把一整个屏幕的内容清空, 然后替换上新的 view stack. 由于新的 view stack 和旧的相比唯一的变化是容器里的页面. 所以勉强实现了 "页面切换" 的效果.
当然, 看完了这个解决方法, 大家也知道问题很大, 几乎没有实用价值.
总结来说在当前版本 (textual v0.1.18) 是没有可行的解决方法的. 也许我们可以等待 css branch 合并后 (我想届时 textual 会迎来大版本更新), 可能会有所变化.