Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在执行期间停用所有按钮-PyQt_Python_User Interface_Pyqt - Fatal编程技术网

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

Python 在执行期间停用所有按钮-PyQt,python,user-interface,pyqt,Python,User Interface,Pyqt,我正在用PyQt构建一个GUI,我希望能够在代码运行时停止所有按钮的任何操作。假设用户正在从一个表中复制大量数据——即使光标已更改为egg计时器,他们也很容易在复制过程中单击另一个按钮。在不浏览所有按钮并逐个将其变灰的情况下,有什么想法或解决方法吗?我也很乐意找到解决办法 谢谢你的建议 Pete您可以使用模态QDialog。从: 另外,它是一个非常方便的工具,可以以非常简单的方式处理阻塞操作。以下是一个例子: from PyQt4 import QtGui, QtCore from time i

我正在用PyQt构建一个GUI,我希望能够在代码运行时停止所有按钮的任何操作。假设用户正在从一个表中复制大量数据——即使光标已更改为egg计时器,他们也很容易在复制过程中单击另一个按钮。在不浏览所有按钮并逐个将其变灰的情况下,有什么想法或解决方法吗?我也很乐意找到解决办法

谢谢你的建议


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)
,您将看到在单击按钮后的五秒钟内所有输入都将被忽略。