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

Posted

技术标签:

【中文标题】pyqt:如何使用相同的函数来设置不同 qt 小部件的文本?【英文标题】:pyqt: How to use a same function to set text of different qt widget? 【发布时间】:2015-03-03 12:09:08 【问题描述】:

我是 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() 集,任何帮助将不胜感激。

非常感谢。

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢,它确实有效!只是代码上的小错字 edit.setText(self.open_file_name()) 应该是 edit.setText(self.open_file_dialog())【参考方案2】:

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

首先,您的信号和插槽必须采用相同的参数。所以上面的行不通。 set_widget_text() 不能带参数,而 clicked() 则不能。

您总是可以通过将 sender() 转换为适当的类来判断 QObject 在插槽内发出了什么信号。在这种情况下,在 Qt 中它将是:

QPushButton* myButton = qobject_cast<QPushButton*>( sender() );

我不确定在 PyQt 中转换是如何工作的,但应该有类似的解决方案。从那里你应该能够弄清楚要打开什么对话框。如果 QPushButton::text() 不起作用,您可以在初始化按钮时使用简单的关联数组将字符串映射到每个按钮。

HTH

【讨论】:

感谢您的回复,我在使用Qt的c++接口时会考虑使用它。

以上是关于pyqt:如何使用相同的函数来设置不同 qt 小部件的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt/PyQt/PySide 中找到当前的 QLocale?

每个选项卡小部件的 PyQt 选项

qtabwidget切换tab如何修改

PyQt QTabWidget 多角小部件

如何在 qt 中使用默认图标

如何对项目的复选框和文本以不同的方式处理点击事件? (PyQt/PySide/Qt)