Python pyqt:如何使用同一个函数设置不同qt小部件的文本?

Python pyqt:如何使用同一个函数设置不同qt小部件的文本?,python,qt,pyqt4,signals-slots,Python,Qt,Pyqt4,Signals Slots,我对Qt和python都是新手。对你们大多数人来说,这可能是一个简单的问题,但我在谷歌上找不到。 我有一个表单,有不同的“路径和按钮”组合。 单击将打开QFileDialog.getOpenFileName()对话框的每个路径,并将文本设置为lineEdit 我的问题是如何编写这样的函数: QtCore.QObject.connect(btn1, QtCore.SIGNAL("clicked()"), set_widge_text(lineEdit1)) QtCore.QObject.conne

我对Qt和python都是新手。对你们大多数人来说,这可能是一个简单的问题,但我在谷歌上找不到。 我有一个表单,有不同的“路径和按钮”组合。 单击将打开QFileDialog.getOpenFileName()对话框的每个路径,并将文本设置为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
有没有办法做到这一点?我不想只为不同的行编辑编写不同的set_widge_text(),如果您有任何帮助,我们将不胜感激

非常感谢。

在Qt(对不起,不熟悉w/PyQt)中,有几件事需要考虑:

首先,信号和插槽必须采用相同的参数。因此,上述方法行不通。set_widget_text()必须不带参数,因为clicked()不带参数

通过将sender()强制转换为适当的类,您始终可以知道QObject在插槽中发出了什么信号。在这种情况下,在Qt中,它将是:

QPushButton* myButton = qobject_cast<QPushButton*>( sender() );
QPushButton*myButton=qobject_cast(sender());
我不确定在PyQt中如何进行转换,但应该有类似的解决方案。从那里,您应该能够确定要打开的对话框。如果QPushButton::text()不起作用,则可以在初始化按钮时使用简单的关联数组将字符串映射到每个按钮


HTH

使用
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', './')

谢谢,它确实有效!代码编辑上的小键入。StTeScript(Soop.OpjiFieleNeMeNe())应该是编辑.SETTHOST(自已.OpenMFILIODIAGORE())。谢谢您的回复,我会考虑使用Qt的C++接口。