我是Qt和python的新手。对于大多数人来说这可能是一个简单的问题,但我无法在Google上找到它。 我有一个表单,有不同的“路径和按钮”组合。 单击它将打开QFileDialog.getOpenFileName()对话框的每个路径,并将setText打开到lineEdit。
我的问题是如何编写这样的函数:
QtCore.QObject.connect(btn1, QtCore.SIGNAL("clicked()"), set_widge_text(lineEdit1))
QtCore.QObject.connect(btn2, QtCore.SIGNAL("clicked()"), set_widge_text(lineEdit2))
QtCore.QObject.connect(btn3, QtCore.SIGNAL("clicked()"), set_widge_text(lineEdit3))
功能:
def set_widge_text(self, widget_name)
widget_name.setText("self.fname")
def open_file_dialog(self):
fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file',
'./')
self.fname = fname
反正有没有实现这个目标?我不想为不同的lineEdits编写不同的set_widge_text()集,任何帮助都会受到赞赏。
非常感谢。
答案 0 :(得分:2)
使用lambda
:
btn1.clicked.connect(lambda: self.set_file_name(lineEdit1))
btn2.clicked.connect(lambda: self.set_file_name(lineEdit2))
btn3.clicked.connect(lambda: self.set_file_name(lineEdit3))
def set_file_name(self, edit):
edit.setText(self.open_file_dialog())
def open_file_dialog(self):
return QtGui.QFileDialog.getOpenFileName(self, 'Open file', './')
答案 1 :(得分:0)
在Qt(对不起,不熟悉w / PyQt),有几件事需要考虑:
首先,你的信号& slot必须采用相同的参数。所以上面的工作没有成功。 set_widget_text()必须不带参数,因为clicked()没有。
通过将sender()强制转换为适当的类,您可以随时告诉QObject在插槽中发出信号的内容。在这种情况下,在Qt中它将是:
QPushButton* myButton = qobject_cast<QPushButton*>( sender() );
我不确定演员如何在PyQt中运行,但应该有一个类似的解决方案。从那里你应该能够找出要打开的对话框。如果QPushButton :: text()不起作用,您可以使用简单的关联数组在初始化按钮时将字符串映射到每个按钮。
HTH