【问题标题】:qml pyside and switchesqml pyside 和开关
【发布时间】:2011-09-06 00:22:03
【问题描述】:

我正在编写我的应用程序 Groundwork,并且我正在使用 pyside 来开发应用程序。 我唯一遇到的问题是激活 qml 开关。 目前我在 qml 文件中有:

signal buttonClicked;
//function start(){text.text="started";buttonClicked()}
Switch {
    id:switchComponent
    anchors.verticalCenterarent.verticalCenter;
    anchors.horizontalCenterarent.horizontalCenter;
}
//end of switch

Text {
    id:text

    color:"red"
    anchors.bottom: switchComponent.top
    anchors.horizontalCenter: switchComponent.horizontalCenter
    //text: switchComponent.checked ? "GROUNDWORK ON" & start() : "Press to Start"
    //text: switchComponent.checked ? "GROUNDWORK ON" && start() : "Press to Start"
    text: switchComponent.checked ? start() : "Press to Start"
    font.pixelSize: 30
    smooth:true
}

当应用程序启动时,按下switchedComponent将信号发送到python并且连接到信号的函数启动但开关永远不会变成蓝色并且文本不会变为“已启动”。您知道应用程序正在运行的唯一方法是大约 10 秒后系统会要求您关闭应用程序。如果您按否,则该应用程序将正常运行。

有人知道为什么会这样吗?我基本上只是希望在 python 函数开始运行之前激活开关和文本,以便用户知道发生了什么。 编辑:完整的 qml 文件可以在这里找到。 https://projects.developer.nokia.com/airplay/browser/groundwork/qml/main.qml 我认为这只是将 pyside 与 qml 一起使用的一部分,即 ui 线程处理python函数时阻塞。

【问题讨论】:

    标签: python qt qml pyside meego


    【解决方案1】:

    我对你的代码有点困惑(而且 Switch 不见了)所以我只能猜测。

    在 Text 组件中调用 start() 对我来说似乎是错误的。应该只是

    Text {
        ...
        text: switchComponent.checked ? "GROUNDWORK ON" : "Press to Start"
    }
    

    文本不必再显式设置,开关必须触发组件的信号。

    Switch {
        onCheckedChanged: {
            if (checked) {
                buttonClicked()
            }
        }
    }
    

    这只是我对您代码的理解的猜测。

    【讨论】:

    • 你说的很有道理,我试着按照你的方式去做,但我得到了相同的结果。该程序有效,但 Gui 没有响应。我认为 qml 的主 gui 线程被阻塞,等待 python 任务完成。我想我将不得不在我的主要任务和被按下的开关之间放置一个虚拟任务。无论如何,现在我知道如何使用按钮检查状态和状态,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2012-05-17
    • 2012-09-13
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多