0

我正在尝试在 lineedit 中显示来自 EPICS(包)的运行时数据。我可以通过我的程序接收和发送我的数据,但是当我无法显示数据时。函数 pv.get() 将 EPICS 中的数据提供给 Python。请建议我进行更改,因为连接中的 SIGNAL 函数给出了错误

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import epics
from epics import *

class MyFrame(QWidget):
    def __init__(self, parent=None):
            QWidget.__init__(self)

            self.lineedit = QLineEdit(self)
            self.lineedit.setGeometry(QRect(250,450,75,28))

            pv=epics.PV('calc:sum.VAL')
            self.lineedit=pv.get()

            self.connect(self.lineedit, SIGNAL("textChanged()"), self.changedata)
            self.color = QColor(Qt.blue)

            self.show()

    def changedata (self):

            pv=epics.PV('calc:sum.VAL')
            self.lineedit=pv.get()
            text=pv.get()


            self.update()


app=QApplication(sys.argv)
f=MyFrame()
f.show()
app.exec_()

`

4

1 回答 1

0

感谢@ivica 的建议。我看到这是 11 个小时没有答案,所以我想我会贡献

您正在用您返回QLineEdit的任何数据替换您的小部件pv.get()。您要做的实际上是将数据设置到小部件上。

class MyFrame(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self)

        self.lineedit = QLineEdit(self)
        self.lineedit.setGeometry(QRect(250,450,75,28))

        pv=epics.PV('calc:sum.VAL')
        self.lineedit.setText(pv.get())

        # new-style signal slot connections
        self.lineedit.textChanged.connect(self.changedata)
        self.color = QColor(Qt.blue)


    def changedata (self):

        pv=epics.PV('calc:sum.VAL')
        self.lineedit.setText(pv.get())

更新

更仔细地检查您的代码示例,我发现了更多潜在问题。

尽管我使用的是新样式的信号连接,但在您的旧样式中,您缺少正确的签名:

self.connect(self.lineedit, SIGNAL("textChanged()"), self.changedata)
# should be
self.connect(self.lineedit, SIGNAL("textChanged(QString)"), self.changedata)

现在,话虽这么说......我不明白你为什么要将文本字段的更改连接到一个插槽,然后更改文本字段。它将导致几个递归触发器。如果您要做的是捕捉文本的编辑,而是调用您的史诗库并从中设置文本,那么您应该使用在textEdited以编程方式更改字段时不会发出的信号。

# new style
self.lineedit. textEdited.connect(self.changedata)
# old style
self.connect(self.lineedit, SIGNAL("textEdited(QString)"), self.changedata)
于 2012-09-10T23:50:11.167 回答