Я создаю приложение реального времени (на малине Pi) в Python, и у меня есть проблема «Обновление значения в программе каждые 5 секунд». Я использую Python 2.7.9 в качестве интерпретатора и для программирования графического интерфейса: PyQt4.Обновление значения каждые n секунд
Я должен сделать запрос к измерительному прибору, и я получаю одно значение от этого инструмента. Я хочу сохранить это значение каждые 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: подключение() слот аргумент должен быть вызываемым или сигнал, не «Nonetype»
Я не знаю, как исправить это. Я старался потоковаться, но я думаю, что это не будет полезно для моего использования процессором RPi. Кто-нибудь знает хорошее решение моей проблемы?
заранее спасибо
Заменить: 'timer.timeout.connect (instrument.update())' 'с timer.timeout.connect (self.instrument.update)'. Другими словами, не вызывайте функцию и не передавайте результат. Передайте сам объект функции. – SuperSaiyan
Извините, это WORK !!!! THANKKSSSSS – Driedan
@DriesHeungens: функции являются первоклассными гражданами в Python: вы можете передавать их как параметры другим функциям 'f (g)', возвращать из функций 'return g', указывать новое имя:' h = g' (оба Имена 'h' и' g' относятся к одному и тому же объекту функции), получают доступ к их атрибутам 'g .__ name__' и т. д. Чтобы вызвать вызываемый, Python использует скобки' g() '. – jfs