PyQt5中,editingFinished连接的槽函数中 QMessageBox 弹出两次

要在保持使用 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 信号触发过程中重复弹出对话框。

PyQt5 Designer,自定义函数是指在UI设计完成后,为了处理特定的用户交互事件而编写的一些Python函数。这些函数通常与UI组件(如按钮、线程等)的预设信号(如点击信号、文本变化信号等)相连。以下是自定义函数并设置它的基本步骤: 1. **打开并编辑UI文件**: 首先,你需要有一个保存了GUI设计的`.ui`文件,可以使用Qt Creator或者PyCharm等IDE打开它。 2. **识别信号和**: 在`Qt Designer`的“工具箱”,找到你想绑定的组件,右键点击它,选择“信号与(Signals & Slots)”。这会显示与组件相关的所有可用信号及其描述。 3. **创建新函数**: 在设计视图的右侧,你会看到一个名为`QObject`的对象树,双击`QObject`,然后在弹出的窗口输入新函数名。例如,假设你想要创建一个处理按钮点击的,可以命名为`on_pushButton_clicked()`,其`pushButton`是你要绑定的按钮。 4. **编写函数代码**: 在生成的.py文件(比如`__init__.py`),找到与你刚刚创建的函数名称对应的函数定义。在函数内编写处理事件的逻辑,比如处理按钮点击后的操作。 ```python def on_pushButton_clicked(self): print("Button clicked!") # 这里可以添加更多具体的业务处理逻辑 ``` 5. **关联函数**: 在`Qt Designer`,选择你想绑定信号的组件,如按钮,从信号列表选择对应的信号,例如`clicked()`, 然后在右侧函数列表找到你刚创建的函数,勾选它。 6. **保存并运行**: 保存你的更改,关闭`Qt Designer`,然后通过运行Python脚本来激活你的UI应用,现在这个自定义函数应该能在相应的事件发生时被调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值