5

是否可以以编程方式切换 a QPushButton?我有QPushButton一个用户按下以启动进程的可检查项。该过程完成后,如何将按钮的状态更改为未选中?

runBtn = QPushButton('Run')
runBtn.setCheckable(True)
runBtn.clicked.connect(runProcess)

def runProcess():
    time.sleep(5)
    runBtn.uncheck()    # how should this be done?
4

3 回答 3

3

这应该是诀窍。

runBtn.setChecked(False)

虽然这不是理想的行为。切换按钮应用于打开和关闭事物,而不是表示正在进行中。如果某些事情需要时间,您应该将光标更改为等待光标,并且最好仍然显示进度条/对话框。

于 2013-10-22T06:30:28.207 回答
2

runBtn.setChecked(False)一旦你的函数完成运行,它应该只是一个调用的问题。

正如@hluk 在对此答案的评论中指出的那样,任何需要很长时间才能完成的事情都会阻塞界面,这并不是一个好主意。在这种情况下,最好将其拆分为一个线程。这可能意味着您需要学习更多,但从长远来看可能是值得的。无论如何,如果您决定采用线程路由,您可能还希望setEnabled(bool)在线程运行时通过按钮禁用用户输入。

于 2013-10-22T06:33:27.020 回答
1

您可以使用 QpushButton 和样式表。这是代码

if(process==running):
     button.setStyleSheet(ENABLE_STYLESHEET )
else
     button.setStyleSheet(DISABLE_STYLESHEET )

你可以定义样式表如下

ENABLE_STYLESHEET = """
    QPushButton {
        border: 1px solid #007a94;
        border-radius: 6px;
        color:#ffffff;
        background-color: #007a94;
        min-width: 80px;
        }
    QPushButton:pressed {
        background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                  stop: 0 #008aa6, stop: 1 #008aa6);
        }

    QPushButton:flat {
        border: none;
        }
"""    
DISABLE_STYLESHEET = """
    QPushButton {
       border: 1px solid #808080;
       border-radius: 6px;
       color:#ffffff;
       background-color: #808080;
       min-width: 80px;
       }
   QPushButton:flat {
       border: none;
       }

"""

启用按钮 禁用按钮

于 2019-03-01T07:57:51.530 回答