Я все еще справляюсь с QT ... Я создал файл Python и файл QML. файл Python обновляет значение датчика из данных, которые он получает по UDP.
Хотя это работает только один раз ... первый пакет UDP приходит и обновляет датчик, но когда он получает следующий пакет, несмотря на значениеобновление, сам датчик не.
QML
CircularGauge {
id: circularGauge
x: 30
y: 30
value: itt1value
minimumValue: 0
maximumValue: 1200
tickmarksVisible: false
style: CircularGaugeStyle {
maximumValueAngle: 400
minimumValueAngle: 90
}
}
Python:
def configureApplication():
# Set up the application window
app = QGuiApplication(sys.argv)
view = QQuickView()
view.setResizeMode(QQuickView.SizeRootObjectToView)
view.setTitle("my title")
# Load the QML file
qml_file = os.path.join(os.path.dirname(__file__), "maingui.qml")
view.setSource(QUrl.fromLocalFile(os.path.abspath(qml_file)))
# load the slots into the QML file
view.rootContext().setContextProperty("itt1value", 0)
t = threading.Thread(target=receivedata, args=(view,))
t.start()
# Show the window
if view.status() == QQuickView.Error:
sys.exit(-1)
view.show()
# execute and cleanup
app.exec_()
del view
В поточном методе receiveata () я получаю данные из UDP, процессзатем отправьте его на датчик следующим образом:
view.rootContext().setContextProperty("itt1value", itt)
receiveata () содержит цикл while с указанными выше деталями, но датчик фактически обновляется только один раз. Если я помещаю инструкцию в файл QML для отображения значения itt1, оно всегда имеет правильное значение, поэтому мне нужно добавить метод, чтобы обнаружить изменение этого значения и перекрасить датчик?
Редактировать: Меня спросили о деталях receiveata (), поэтому я прикрепил его здесь:
def receivedata(view):
print("Starting UDP server...")
UDP_IP = "192.168.0.14"
UDP_PORT = 49000
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
olditt = 0
loopruns = 0 # for debugging
while True:
rawstring = sock.recv(1024)
hexarray = []
#lots of irrelevent formatting here, result is int(value)
itt = float(hextoint(value, olditt))
olditt = itt
itt = format(itt, '.3f')
current = str(loopruns) # for debugging
view.setTitle(current) # for debugging
view.rootContext().setContextProperty("itt1value", itt)
loopruns = loopruns + 1
print(itt)