在执行期间停用所有按钮 - PyQt

时间:2014-01-13 09:18:01

标签: python user-interface pyqt

我正在使用PyQt构建一个GUI,我想在代码运行时让所有按钮停止运行。假设用户正在从表中复制大量数据 - 即使光标已更改为egg计时器,它们也很容易在发生时单击另一个按钮。任何想法或变通方法都没有通过所有按钮并逐个灰化它们?我也很乐意解决这个问题!

感谢任何想法,

皮特

1 个答案:

答案 0 :(得分:2)

您可以使用模态QDialog。来自QDialog pyqt documentation

A modal dialog is a dialog that blocks input 
to other visible windows in the same application.

此外,QProgressDialog是一种非常方便的工具,可以非常简单的方式处理阻止操作。这是一个例子:

from PyQt4 import QtGui, QtCore
from time import sleep

class Test(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Test, self).__init__(parent)
        button = QtGui.QPushButton("Button")
        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(button)
        self.setLayout(hbox)
        button.clicked.connect(self.slot)

    def slot(self):
        progress = QtGui.QProgressDialog(self)
        progress.setWindowModality(QtCore.Qt.WindowModal)
        progress.setLabel(QtGui.QLabel("Doing things..."))
        progress.setAutoClose(True)
        for i in range(101):
             progress.setValue(i);
             sleep(0.05)
             if progress.wasCanceled():
                 break

if __name__=="__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    myapp = Test()
    myapp.show()
    sys.exit(app.exec_())