如何在 Qt Designer 中创建一个打开 QFileDialog 的信号?

Posted

技术标签:

【中文标题】如何在 Qt Designer 中创建一个打开 QFileDialog 的信号?【英文标题】:How do I create a signal to open a QFileDialog in Qt Designer? 【发布时间】:2017-02-04 21:57:40 【问题描述】:

在 Qt Designer 5 中,如何创建一个信号来打开QFileDialog?我正在使用 Python 和 PyQt。我尝试使用“编辑信号/插槽”创建信号,我可以选择我想要的按钮作为发送者,但我无法选择任意函数作为接收者,列表中只有现有的小部件可用。

【问题讨论】:

【参考方案1】:

为了创建自定义信号/槽以便以后在您的 Python 应用程序中使用,您需要通过右键单击小部件并单击 更改信号/槽...来添加它们。 ,如下图所示:

您需要添加所需的 slots,如下所示,mybutton_clicked() 函数:

到目前为止,插槽已创建,可以在 Signals & Slots Editor 选项卡中使用它。进入此选项卡后,单击+ 按钮,如果上一步正确完成,则会出现接收器插槽,如下所示:

最后,将请求的QFileDialog集成到按钮按下方法中,就这么简单:

from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog
from PyQt5 import uic
import sys


form_class = uic.loadUiType("mainWindow.ui")[0]  # Load the UI

class MyWindowClass(QMainWindow, form_class):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.setupUi(self)

    def mybutton_clicked(self):
        options = QFileDialog.Options()
        fileName, _ = QFileDialog.getOpenFileName(self,"QFileDialog.getOpenFileName()", "","All Files (*)", options=options)
        if fileName:
            print(fileName)

app = QApplication(sys.argv)
myWindow = MyWindowClass(None)
myWindow.show()
app.exec_()

【讨论】:

或者你可以绕过所有设计者的繁文缛节,只需将行 self.mybutton.clicked.connect(self.mybutton_clicked) 添加到 __init__() 的末尾。 我完全同意。我想 Qt 设计者需要以某种方式完成这项任务。 我需要在“更改信号/插槽...”对话框中单击绿色的+ 来添加mybutton_clicked() 功能,对吧? 是的。在插槽框中。 @eric TBF,答案使这种方法看起来比实际需要的复杂得多。在我很少使用它的情况下,我只需单击编辑信号/插槽工具栏按钮,拖动一个连接,然后通过自动弹出的对话框添加插槽。最终结果实际上是同一行代码,只是添加到setupUi 而不是__init__。所以你可以说这实际上是一个方便的问题,而不是创建惯用的代码。

以上是关于如何在 Qt Designer 中创建一个打开 QFileDialog 的信号?的主要内容,如果未能解决你的问题,请参考以下文章

Qt,Designer 在scrollArea 中创建scrollAreaWidgetContents,我无法调整图像标签的大小

如何访问在 QtCreator Designer 中创建的 QLabel?

如何在我的 Qt 窗口中创建一个“洞”?

Qt:如何将类连接到自定义 Qt 设计器小部件

使用 Qt Designer 表单和 PyQt5 在 QWidget 中绘制 matplotlib 图形

如何在Qt Creator中创建pri文件,以及pri文件的说明