簡體   English   中英

從python + QT中的事件更新GUI

[英]Update GUI from event in python + QT

在運行樹莓派的樹莓派PI上,我正在使用python + QT(PyQt4)

我試圖在gpio輸入更改其狀態時顯示中斷事件的值。 這是python代碼:

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import os
import random
import datetime
import sys
from threading import Thread

from PyQt4 import QtCore, QtGui, uic


qtCreatorFile = "form.ui" # Enter file here.
global Ui_MainWindow, QtBaseClass 
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

global Start

Tmp = datetime.datetime(2000,12,14) 
Start = Tmp.today()   
print str(Start)

def my_Start(channel): #Interrupt 18

   Tmp = datetime.datetime(2000,12,14)  
   Start = Tmp.today()   


def my_Stop(channel): #Interrupt 24
    Tmp = datetime.datetime(2000,12,14)
    Stop = Tmp.today()   
    print str(Stop-Start)
    self.label.setText(str(Stop-Start))





GPIO.add_event_detect(18, GPIO.FALLING, callback=my_Start,bouncetime=2000)
GPIO.add_event_detect(24, GPIO.RISING, callback=my_Stop,bouncetime=2000)
class MyApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.lcdNumber.display(10.1)





if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

問題和自我在my_stop回調中無法識別。 所以我的問題是:如何從此回調更新我的GUI。

謝謝

編輯

使用下面的答案,它起作用。唯一需要修改的是:

  • 將Def my_start和my_stop移至GUI類
  • 像這樣定義它們:

     def my_Start(self,channel): def my_Stop(self,channel): 
  • 像這樣聲明事件:

     if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = MyApp() GPIO.add_event_detect(18, GPIO.FALLING, callback=window.my_Start,bouncetime=2000) GPIO.add_event_detect(24, GPIO.RISING, callback=window.my_Stop,bouncetime=2000) window.show() sys.exit(app.exec_()) 

感謝幫助者

您在非成員函數中調用self 在這種情況下,沒有self可以參考。 my_Startmy_Stop應該是myApp成員:

class MyApp ...
    def my_Stop(self, channel):
        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM