2 Files auslesen und mit diesen 2 Labels updaten geht nicht!

Fragen zu Tkinter.
Antworten
mexxwell
User
Beiträge: 6
Registriert: Sonntag 24. Februar 2013, 14:55

Hallo,

Ich bitte Euch um Hilfe. Ehrlich, ich weiss nicht mehr weiter, hab schon Stunden herum probiert!!! :cry:
Ich moechte aus zwei verschiedenen Files einfach Werte auslesen. Das klappt auch soweit ohne Probleme. Diese Werte uebergebe ich dann an zwei Labels welche sich periodisch updaten sollen (Temperatur).
Jetzt kommts:
Kommentiere ich eine von den beiden Abfragen welche die Daten holen aus, funktioniert es. Lasse ich beide laufen gehts nicht mehr!!!!!!Uebrigens vize versa! Ich werde noch irre damit. Keine Ahnung warum. Kann mir bitte jemand helfen, hier ist der Code:

Code: Alles auswählen

from Tkinter import *
import time
import os
import glob
import time
import math

root = Tk()
time1 = ''
clock = Label(root, font=('times', 20, 'bold'), bg='green')
clock.pack(fill=BOTH, expand=1)
clock2 = Label(root, font=('times', 20, 'bold'), bg='green')
clock2.pack(fill=BOTH, expand=1)

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

def read_temp():
    # Erste Abfrage
    file = open('/sys/bus/w1/devices/10-0008028e9bb9/w1_slave')
    filecontent = file.read()
    stringvalue = filecontent.split("\n")[1].split(" ")[9]
    temperature = float(stringvalue[2:]) / 1000
    clock.config(text=temperature)
    clock.after(100, read_temp)
    file.close()
    # Zweite Abfrage
    file = open('/sys/bus/w1/devices/10-0008028ea0bf/w1_slave') 
    filecontent2 = file.read()
    stringvalue2 = filecontent2.split("\n")[1].split(" ")[9]
    temperature2 = float(stringvalue2[2:]) / 1000
    clock2.config(text=temperature2)
    clock2.after(200, read_temp)
    file.close()

read_temp()

root.mainloop()
Vielen Dank im Voraus!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi mexxwell

Kannst du das folgende einmal austesten?:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

class Tic(tk.Label):
    
    def __init__(self, parent, sample_time, file=''):
        self.parent = parent
        self.sampling_time = sample_time
        self.file = file
        
        self.sample = tk.StringVar()
        self.sample.set('?')
        tk.Label.__init__(self, parent, textvariable=self.sample, width=10,
            relief='sunken', bd=1, bg='white')
        self.pack(padx=4, pady=2)
        
        self.sampler()

    def sampler(self):
        self.get_data()
        
        self.parent.after(self.sampling_time, self.sampler)
        
    def get_data(self):
        if self.file == '': return
        with open(self.file, 'r') as input_file:
            data = input_file.read()
        print(data)
        self.sample.set(data)    

#----- MODUL_TEST -------------------------------------------------------------#
if __name__ == '__main__':
            
    app_win = tk.Tk()

    #file = '/sys/bus/w1/devices/10-0008028e9bb9/w1_slave'
    file = 'temperatur_01.txt'
    tic_01 = Tic(app_win, 200, file)

    #file = '/sys/bus/w1/devices/10-0008028ea0bf/w1_slave'
    file = 'temperatur_02.txt'
    Tic_02 = Tic(app_win, 400, file)

    app_win.mainloop()
Gruß wuf :wink:
Take it easy Mates!
BlackJack

@mexxwell: Dein `read_temp()` ruft bei jedem Aufruf *zweimal* `after()` für sich selbst auf. Damit „explodiert” die Anzahl der geplanten Aufrufe in der Warteschlage nach kurzer Zeit.

Hast Du die Hardware als Fehlerquelle eigentlich schon ausgeschlossen? Mag die das in 100 Millisekundenabständen direkt nacheinander nach zwei Werten gefragt zu werden?
Antworten