Python 在执行期间停用所有按钮-PyQt
我正在用PyQt构建一个GUI,我希望能够在代码运行时停止所有按钮的任何操作。假设用户正在从一个表中复制大量数据——即使光标已更改为egg计时器,他们也很容易在复制过程中单击另一个按钮。在不浏览所有按钮并逐个将其变灰的情况下,有什么想法或解决方法吗?我也很乐意找到解决办法 谢谢你的建议Python 在执行期间停用所有按钮-PyQt,python,user-interface,pyqt,Python,User Interface,Pyqt,我正在用PyQt构建一个GUI,我希望能够在代码运行时停止所有按钮的任何操作。假设用户正在从一个表中复制大量数据——即使光标已更改为egg计时器,他们也很容易在复制过程中单击另一个按钮。在不浏览所有按钮并逐个将其变灰的情况下,有什么想法或解决方法吗?我也很乐意找到解决办法 谢谢你的建议 Pete您可以使用模态QDialog。从: 另外,它是一个非常方便的工具,可以以非常简单的方式处理阻塞操作。以下是一个例子: from PyQt4 import QtGui, QtCore from time i
Pete您可以使用模态
QDialog
。从:
另外,它是一个非常方便的工具,可以以非常简单的方式处理阻塞操作。以下是一个例子:
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_())
您可以使用模态
QDialog
。从:
另外,它是一个非常方便的工具,可以以非常简单的方式处理阻塞操作。以下是一个例子:
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_())
您可以使用模态
QDialog
。从:
另外,它是一个非常方便的工具,可以以非常简单的方式处理阻塞操作。以下是一个例子:
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_())
您可以使用模态
QDialog
。从:
另外,它是一个非常方便的工具,可以以非常简单的方式处理阻塞操作。以下是一个例子:
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_())
系统地将您创建的所有按钮放入列表,然后在列表上迭代以禁用它们。系统地将您创建的所有按钮放入列表,然后在列表上迭代以禁用它们。系统地将您创建的所有按钮放入列表,然后在列表上迭代以禁用它们。系统地将您创建的所有按钮放入列表,然后在列表上迭代以禁用它们。我没有说清楚,但我说的是在一个对话框中发生的事情。但是,如果我添加了一个隐藏的模式QProgressDialog,它就可以工作了(代码足够慢,人们可以有时间点击不应该点击的地方,但速度不会太慢,以至于它确实需要一个进度指示器!)。谢谢你的帮助!在这种情况下,如果长时间执行没有线程化,则无需执行任何操作。如果主线程正忙于运行连接到插槽的代码,则整个GUI将被冻结,输入将被忽略。尝试将我的
slot
方法替换为def slot(self):sleep(5)
,您将看到在单击按钮后的五秒钟内,您的所有输入都将被忽略。我没有说清楚,但我说的是在一个对话框中发生的事情。但是,如果我添加了一个隐藏的模式QProgressDialog,它就可以工作了(代码足够慢,人们可以有时间点击不应该点击的地方,但速度不会太慢,以至于它确实需要一个进度指示器!)。谢谢你的帮助!在这种情况下,如果长时间执行没有线程化,则无需执行任何操作。如果主线程正忙于运行连接到插槽的代码,则整个GUI将被冻结,输入将被忽略。尝试将我的slot
方法替换为def slot(self):sleep(5)
,您将看到在单击按钮后的五秒钟内,您的所有输入都将被忽略。我没有说清楚,但我说的是在一个对话框中发生的事情。但是,如果我添加了一个隐藏的模式QProgressDialog,它就可以工作了(代码足够慢,人们可以有时间点击不应该点击的地方,但速度不会太慢,以至于它确实需要一个进度指示器!)。谢谢你的帮助!在这种情况下,如果长时间执行没有线程化,则无需执行任何操作。如果主线程正忙于运行连接到插槽的代码,则整个GUI将被冻结,输入将被忽略。尝试将我的slot
方法替换为def slot(self):sleep(5)
,您将看到在单击按钮后的五秒钟内,您的所有输入都将被忽略。我没有说清楚,但我说的是在一个对话框中发生的事情。但是,如果我添加了一个隐藏的模式QProgressDialog,它就可以工作了(代码足够慢,人们可以有时间点击不应该点击的地方,但速度不会太慢,以至于它确实需要一个进度指示器!)。谢谢你的帮助!在这种情况下,如果长时间执行没有线程化,则无需执行任何操作。如果主线程正忙于运行连接到插槽的代码,则整个GUI将被冻结,输入将被忽略。尝试将我的slot
方法替换为def slot(self):sleep(5)
,您将看到在单击按钮后的五秒钟内所有输入都将被忽略。