以编程方式切换Python PyQt QPushbutton

时间:2013-10-22 03:24:51

标签: python qt python-2.7 pyqt pyqt4

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

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

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

3 个答案:

答案 0 :(得分:1)

这应该是诀窍。

runBtn.setChecked(False)

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

答案 1 :(得分:1)

一旦你的函数运行完毕,它应该只是调用runBtn.setChecked(False)

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

答案 2 :(得分: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