在pyqt5中单击按钮之前触发浏览按钮方法[重复]

Posted

技术标签:

【中文标题】在pyqt5中单击按钮之前触发浏览按钮方法[重复]【英文标题】:Browse button method trigerring before the button is clicked in pyqt5 [duplicate] 【发布时间】:2020-05-26 05:30:32 【问题描述】:

我在 UI 中有浏览按钮,单击该按钮会触发打开文件对话框。我的问题是即使在单击浏览按钮之前打开文件对话框也会触发。下面是我的代码

class GisedifySupportDialog(QtWidgets.QDialog, FORM_CLASS):
def __init__(self, parent=None):
    """Constructor."""
    super(GisedifySupportDialog, self).__init__(parent)
    self.setupUi(self)
    self.img_upload=Upload_Image()
    self.img_upload.setupUi(self.upload_image_dialog)
    self.img_upload.pushButton.clicked.connect(self.browseTheFileAudio(self.img_upload.lineEdit))
def browseTheFileAudio(self,lineedit_name):
    self.fileName = QtWidgets.QFileDialog.getOpenFileName(self, "Browse for the file", os.getenv("HOME"))
    self.fileName=self.fileName
    lineedit_name.setText(str(self.fileName))
    return self.fileName

为什么 briwseTheFileAudio 函数在按钮被点击之前就被触发了?

【问题讨论】:

【参考方案1】:

当你说:

self.img_upload.pushButton.clicked.connect(self.browseTheFileAudio(self.img_upload.lineEdit))

您正在调用函数browseTheFileAudio,并且该函数的返回值被传递给pushButton.clicked.connect。那不是你想要的。您想将函数对象(而不是实际调用它)传递给pushButton.clicked.connect,您只想在单击按钮时触发它。这就是绑定回调的方式。

鉴于您的回调也需要一个参数,您可以使用 lambda:

self.img_upload.pushButton.clicked.connect(lambda le=self.img_upload.lineEdit: self.browseTheFileAudio(le))

【讨论】:

关于如何访问传递给 lambda 文件的值的任何建议?因为我得到了 le 的布尔值 @User123 如果le 是布尔值,则意味着self.img_upload.lineEdit 是布尔值。确认您没有在代码中的其他位置意外地将该小部件引用替换为布尔值。

以上是关于在pyqt5中单击按钮之前触发浏览按钮方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在每个 Qlabel PyQt5 中显示两个图像

在 PyQt5 中使用浏览按钮添加适当的 FileDialog

如何知道Firefox中是否单击了刷新按钮或浏览器后退按钮[重复]

PyQt5 - 关闭应用程序 bec。 .value() 方法的错误[重复]

在 iframe 内触发按钮单击 [重复]

如何确保整个标签在窗口中可见[重复]