【发布时间】:2020-10-19 12:18:22
【问题描述】:
在我的程序中,我有一个按钮连接到一个需要大约 15 秒才能运行的功能。我想在此运行时忽略所有用户输入。当按下btn 时,会调用以下函数:
def btn_call(self) :
self.btn.setEnable(False) # disables the button and shows it greyed out
fn() # some function that takes ~15 seconds to run
self.btn.setEnable(True) # re-enables the button
希望在fn() 运行时阻止程序响应btn 按下。目前,如果在fn() 运行时按下btn,则每次按下btn 时都会运行fn()。
有没有办法清除fn() 运行时发生的所有用户输入?
编辑:
添加了 MWE。如果您单击Run Function.,该功能将开始。如果您在运行时单击Run Function.,该函数将再次运行。这是我想停止的行为。
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
from time import sleep
def fn(num) :
for i in range(num) :
sleep(0.5)
yield i
class MainWindow(QWidget) :
def __init__(self) :
super().__init__()
self.layout = QVBoxLayout(self)
self.btn_fn = QPushButton("Run function.")
self.btn_fn.clicked.connect(self.run_fn)
self.layout.addWidget(self.btn_fn)
self.prog_bar = QProgressBar()
self.layout.addWidget(self.prog_bar)
self.show()
def run_fn(self) :
self.btn_fn.setEnabled(False)
num = 20
self.prog_bar.setValue( 0 )
for i in fn(num) :
self.prog_bar.setValue( 100*(i+1)/num )
self.btn_fn.setEnabled(True)
if __name__ == '__main__' :
app = QApplication(sys.argv)
window = MainWindow()
sys.exit( app.exec_() )
【问题讨论】: