2

Python で (Raspberry Pi で) リアルタイム アプリケーションを作成していますが、「5 秒ごとにプログラムの値を更新する」という問題があります。私は Python 2.7.9 をインタープリターとして、また GUI プログラミングに PyQt4 を使用しています。

測定器にリクエストを行う必要があり、この測定器から 1 つの値を取得します。この値を 5 秒ごとに保存します。しかし、他のことをしなければならないので、待つようにプログラムしたくありません。無限 while ループはできません。これは私のメインプログラムのコードです:

class ApplicationWindow(QtGui.QMainWindow):
    def __init__(self):

        QtGui.QMainWindow.__init__(self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowTitle("application main window")
        self.setStyleSheet('background-color:#DBE0E4')
        self.file_menu = QtGui.QMenu('&File', self)
        self.file_menu.addAction('&Quit', self.fileQuit,
                              QtCore.Qt.CTRL + QtCore.Qt.Key_Q)
        self.menuBar().addMenu(self.file_menu)

        self.help_menu = QtGui.QMenu('&Help', self)
        self.menuBar().addSeparator()
        self.menuBar().addMenu(self.help_menu)

        self.help_menu.addAction('&About', self.about)

        self.instrument=Online_meter('name','pasword')

        timer=QtCore.QTimer()
        timer.start(5000)
        timer.timeout.connect(instrument.update())



        self.main_widget = QtGui.QWidget(self)
        layout=QtGui.QGridLayout(self.main_widget)
        layout.setSpacing(10)
        layout.expandingDirections()

        time=Datetime() 
        dc = Plotgraph(self.main_widget)
        label1=Label(" Value:",False)
        label2=Label("waarde",True)

        layout.addWidget(dc,1,1,8,7)
        layout.addWidget(time,1,8,1,2)
        layout.addWidget(label1,2,8,1,2)
        layout.addWidget(label2,3,8,1,2)

        self.main_widget.setFocus()
        self.setCentralWidget(self.main_widget)



   def fileQuit(self):
       self.close()

   def closeEvent(self, ce):
       self.fileQuit()

   def about(self):
       QtGui.QMessageBox.about(self, "About",
        """
       Copyright 2014 
       """

      )


qApp = QtGui.QApplication(sys.argv)

aw = ApplicationWindow()
aw.setWindowTitle("my app")
aw.showFullScreen()
sys.exit(qApp.exec_())

オンライン メーターを更新するためのメソッドのコードは次のとおりです。

   def update(self):


        waarden=self.post_request(meter)
        self.data=[datetime.now(),values[6]]

ここでQtimerを使用しようとしました。これはうまくいくだろうと思ったが、うまくいかない。次のエラーが表示されます。

TypeError: connect() スロット引数は、「Nonetype」ではなく、呼び出し可能またはシグナルでなければなりません

どう直せばいいのかわからない。スレッド化について考えましたが、これは RPi の CPU 使用率には適していないと思います。私の問題に対する良い解決策を知っている人はいますか?

前もって感謝します

4

1 に答える 1

3

これ:

timer.timeout.connect(instrument.update())

おそらくあるはずです

timer.timeout.connect(instrument.update)

前者は、その行の実行中にすぐに関数を呼び出します。関数は を返すNoneため、 でエラーが発生し.connectます。後者は、その機能をtimeoutスロットに接続するだけです。

の最初の呼び出しはinstrument.update5 秒後に発生する必要があります

于 2015-02-15T11:02:56.927 に答える