以编程方式切换Python PyQt QPushbutton

问题描述 投票:4回答:3

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

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

def runProcess():
    time.sleep(5)
    runBtn.uncheck()    # how should this be done?
python qt python-2.7 pyqt pyqt4
3个回答
1
投票

这应该是诀窍。

runBtn.setChecked(False)

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


1
投票

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

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


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;
       }

"""

Enable Button Disable Button

© www.soinside.com 2019 - 2024. All rights reserved.