社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  tornado

在TornadoFx中使用工作区时如何使用范围?

Hexworks • 7 年前 • 1342 次点击  

我正在使用 Workspace 龙卷风的特点,我正在努力使他们与 Scopes . 当我启动应用程序时,我需要设置一些东西,当它完成时,我启动TornadoFX应用程序并提供 Scope 我的第一个观点。之后我想能够 dock 我的其他观点 工作空间 在新的 范围 但这不起作用,因为某些原因:原始的 View 不会被拆掉,但是新的 视图 我只是在屏幕上看不到它。有什么问题?下面是我的代码来重现这个问题:

fun main(args: Array<String>) {
    Application.launch(TestApp::class.java, *args)
}


class ParentScope : Scope() {
    val id = UUID.randomUUID().toString().substring(0, 4)
}

class ChildScope : Scope() {
    val id = UUID.randomUUID().toString().substring(0, 4)
}

class TestApp : App(Workspace::class) {

    override fun onBeforeShow(view: UIComponent) {
        workspace.dock<ParentView>(ParentScope())
    }
}

class ParentView : View("parent") {

    override val scope = super.scope as ParentScope

    override val root = hbox {
        button("new child") {
            action {
                workspace.dock<ChildView>(ChildScope())
            }
        }
    }

    override fun onDock() {
        logger.info("Docking parent (${scope.id})")
    }

    override fun onUndock() {
        logger.info("Undocking parent (${scope.id})")
    }

}

class ChildView : View("child") {

    override val scope = super.scope as ChildScope

    override val root = hbox {
        text("In child")
    }

    override fun onDock() {
        logger.info("Docking child (${scope.id})")
    }

    override fun onUndock() {
        logger.info("Undocking child (${scope.id})")
    }

}

单击w后的输出 new child 按钮是这样的:

10:56:19.415 [JavaFX Application Thread] INFO  Test - Docking parent (d202) 
10:56:23.967 [JavaFX Application Thread] INFO  Test - Docking child (cbc5)

我看到的是一样的 ParentView . 如果我点击 新生儿童 再一次 ChildView 脱离连接,一个新的 儿童观 停靠,但我仍然只看到 父视图 :

10:56:31.228 [JavaFX Application Thread] INFO  Test - Undocking child (cbc5)
10:56:31.228 [JavaFX Application Thread] INFO  Test - Docking child (1dd8)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30961
文章 [ 1 ]  |  最新文章 7 年前
Edvin Syse
Reply   •   1 楼
Edvin Syse    7 年前

这个 App 已经定义了 Scope 与相应的 Workspace 例如,当你的初始 View 停靠在 工作空间 你的新 ParentScope 定义新的 工作空间 实例。当你停靠 ChildView 进入 工作空间 它确实做到了这一点,但相关的工作区不会显示在屏幕上。

要解决这个问题,您可以这样覆盖应用程序的主要作用域:

class TestApp : WorkspaceApp(ParentView::class) {
    init {
        scope = ParentScope()
    }
}

还请注意,我使用 WorkspaceApp 子类,因此我不需要停靠 ParentView 手动。

在研究这个问题时,我意识到,如果您将一个ui组件停靠到一个工作区中,那么它应该假定它已经停靠在一个工作区中。出于这个原因,我已经提交了一个修复程序,这样您的初始代码就可以在不进行修改的情况下工作。