将参数传递给QT Designer构建的槽函数

时间:2016-05-10 14:04:31

标签: python c++ qt user-interface qt-designer

我是GUI设计的新手,我开始使用QT Designer 4.8.6。我使用信号槽机制连接按钮以实现功能。

以下是pyuic4 util生成的用于创建GUI脚本的一些连接:

QtCore.QObject.connect(self.btn_add_codes, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.sel_codes_file)
QtCore.QObject.connect(self.btn_add_xls, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.sel_excel_file)

我的主python文件(path_codespath_excel中的相关函数是QLineEdit小部件):

class MainDialog(QtGui.QMainWindow, gui_v1.Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainDialog, self).__init__(parent)
        self.setupUi(self)

    def sel_codes_file(self):
        self.path_codes.setText(QtGui.QFileDialog.getOpenFileName())

    def sel_excel_file(self):
        self.path_excel.setText(QtGui.QFileDialog.getOpenFileName())

我想对所有按钮使用通用函数,这些按钮的操作是搜索文件并在LineEdit小部件中显示路径。我将此函数添加到我的MainDialog类中:

def select_file(self, textbox):
        self.textbox.setText(QtGui.QFileDialog.getOpenFileName())

我将连接修改为:

QtCore.QObject.connect(self.btn_add_codes, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.select_file(textbox=self.path_codes)

它无法正常工作。主窗口未显示此代码,我收到此错误:AttributeError: 'MainDialog' object has no attribute 'textbox'

是否可以将参数传递给插槽连接函数?如果是这样,我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

这个lambda有用吗?至少这就是我在使用C ++时使用Qt的方式。

self.btn_add_codes.clicked.connect(lambda codes=self.path_codes: MainWindow.select_file(codes))