我是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_codes
和path_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'
是否可以将参数传递给插槽连接函数?如果是这样,我做错了什么?谢谢!
答案 0 :(得分:0)
这个lambda有用吗?至少这就是我在使用C ++时使用Qt的方式。
self.btn_add_codes.clicked.connect(lambda codes=self.path_codes: MainWindow.select_file(codes))