要在保持使用 editingFinished
信号的同时避免重复弹出对话框,可以使用一个标志位来记录是否已经弹出了对话框。这样可以确保在同一编辑操作中不会多次弹出对话框。
重点是:
if not self.dialog_shown: # 检查是否已经弹出过对话框
self.dialog_shown = True # 设置标志位,表示对话框已经弹出过
QMessageBox.warning(self, '警告', '目标文件应为文本文件!', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
self.dialog_shown = False # 重置标志位,以便下一次可以继续弹出对话框
下面是改进后的代码:
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QMessageBox
from PyQt5.QtWidgets import QPushButton
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.dialog_shown = False # 初始化标志位
def initUI(self):
# 创建一个 QLineEdit 控件
self.lineEdit = QLineEdit(self)
self.lineEdit.move(20, 20) # 设置位置
self.lineEdit.resize(200, 30) # 设置大小
# 创建一个按钮,当点击时将获取 QLineEdit 的内容
self.button = QPushButton('获取文本', self)
self.button.move(20, 60) # 设置位置
self.lineEdit.editingFinished.connect(self.getLineEditText)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('获取 QLineEdit 内容')
def getLineEditText(self):
if not self.dialog_shown: # 检查是否已经弹出过对话框
self.dialog_shown = True # 设置标志位,表示对话框已经弹出过
QMessageBox.warning(self, '警告', '目标文件应为文本文件!', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
self.dialog_shown = False # 重置标志位,以便下一次可以继续弹出对话框
if __name__ == '__main__':
app = QApplication([])
ex = Example()
ex.show()
app.exec_()
在这个改进的代码中,self.dialog_shown
用来记录对话框是否已经弹出。在对话框弹出时将其设置为 True
,并在对话框关闭后将其重置为 False
。这样就可以避免在同一 editingFinished
信号触发过程中重复弹出对话框。