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