Python PyQt:我无法在外部程序的lineedit中显示数据

时间:2012-09-10 11:39:14

标签: python pyqt

我正在尝试在lineedit中显示来自EPICS(Package)的运行时数据。我可以通过我的程序接收和发送我的数据,但是当我无法显示数据时。函数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_()

`

1 个答案:

答案 0 :(得分: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)

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

# new style
self.lineedit. textEdited.connect(self.changedata)
# old style
self.connect(self.lineedit, SIGNAL("textEdited(QString)"), self.changedata)