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 に答える