Gast Broken_Mind Geschrieben June 22, 2014 at 06:59 Geschrieben June 22, 2014 at 06:59 Guten Morgen, ich versuche mich momentan an Python auf meinem Pi. Ich wollte das doe Temperatur in ein Textfeld angezeigt wird. Deshalb habe ich es mit folgedem Code versucht: (nicht wundern, ist sehr durcheinander und vieles zum Testen drinnen #!/usr/bin/env python # -*- coding: utf-8 -*- from Tkinter import * from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_remote_switch import RemoteSwitch from tinkerforge.bricklet_temperature import Temperature import os #Tinkerforge HOST = "127.0.0.1" PORT = 4223 RemoteSwitch_UID = "jNw" Temperature_UID = "dFu" root = Tk() root.title("GUI") WMWIDTH, WMHEIGHT, WMLEFT, WMTOP = root.winfo_screenwidth(), root.winfo_screenheight(), 0, 0 root.overrideredirect(1) root.geometry("%dx%d+%d+%d" % (WMWIDTH, WMHEIGHT, WMLEFT, WMTOP)) #Temperature def cb_temperature(temperature): # print('Temperature: ' + str(temperature/100.0) + ' °C') T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C') if __name__ == "__main__": ipcon = IPConnection() t = Temperature(Temperature_UID, ipcon) ipcon.connect(HOST, PORT) t.set_temperature_callback_period(1000) t.register_callback(t.CALLBACK_TEMPERATURE, cb_temperature) def shutdown(): os.system("sudo shutdown -h now") def reboot(): os.system("sudo shutdown -r now") def light_on(): if __name__ == "__main__": ipcon = IPConnection() rs = RemoteSwitch(RemoteSwitch_UID, ipcon) ipcon.connect(HOST, PORT) rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_ON) def light_off(): if __name__ == "__main__": ipcon = IPConnection() rs = RemoteSwitch(RemoteSwitch_UID, ipcon) ipcon.connect(HOST, PORT) rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_OFF) #def netio(): # os.system("sudo python /home/pi/GUI/tinkerforge/tinkerforge listen --enable-execute") def exit(): sys.exit() #b=Button(root, text= "NetIO", command=netio) #b.pack() logo = PhotoImage(file="/home/pi/GUI/images/rpi_inside.gif") w1 = Label(root, image=logo, height=32, width=32).grid(row=1, column=3) MyButton1 = Button(root, text="Shutdown", width=10, command=shutdown) MyButton1.grid(row=1, column=0) MyButton1 = Button(root, text="Reboot", width=10, command=reboot) MyButton1.grid(row=2, column=0) MyButton1 = Button(root, text="Exit", width=10, command=exit) MyButton1.grid(row=3, column=2) MyButton1 = Button(root, text="Licht an", width=10, command=light_on) MyButton1.grid(row=4, column=1) MyButton1 = Button(root, text="Licht aus", width=10, command=light_off) MyButton1.grid(row=5, column=1) T = Text(root, height=2, width=30) T.grid(row=6, column=3) T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C') root.mainloop() Das Textfeld wird angezeigt bleibt aber leer. Hoffe jemand könnte einem Anfänger helfen Ach ja und was bedeutet dies: #!/usr/bin/env python # -*- coding: utf-8 -*- Habe dies einfach mal übernommen aber was hat es das für einen Sinn wenn es doch auskommentiert ist? Grüße Zitieren
wehnerc Geschrieben June 23, 2014 at 10:06 Geschrieben June 23, 2014 at 10:06 Ach ja und was bedeutet dies: #!/usr/bin/env python # -*- coding: utf-8 -*- Habe dies einfach mal übernommen aber was hat es das für einen Sinn wenn es doch auskommentiert ist? Beim ersten Eintrag handelt es sich um einen shebang #! Gilt nur bei UNIX-ähnlichen Betriebssystemen. Die Markierung mit Doppelkreuz und Ausrufezeichen führt dazu, dass das folgende Kommando mitsamt allen angegebenen Argumenten beim Aufruf des Programms ausgeführt wird. Beim zweiten Eintrag vermute ich die Zeichensatzcodierung des geschriebenen Textes (Skript). Zitieren
photron Geschrieben June 23, 2014 at 10:29 Geschrieben June 23, 2014 at 10:29 Du hast da mehrere Probleme in deinem Script. Die if __name__ == "__main__": Blöcke gehören so nicht innerhalb von Funktionen, bzw. machen da keinen Sinn. Du hast bei der Einrückung Tabs und Spaces gemischt, das mag Python im Zweifels so nicht und führt zu komischen Problemen, da Blöcke in Python durch Einrückung gebildet werden. Die Registrierung und Aktivierung des Temperature-Callbacks erfolgt in der Callback Funktion. Dass kann so nicht funktionieren, das muss außerhalb von cb_temperature() passieren. Etwa so: #!/usr/bin/env python # -*- coding: utf-8 -*- from Tkinter import * from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_remote_switch import RemoteSwitch from tinkerforge.bricklet_temperature import Temperature import os #Tinkerforge HOST = "127.0.0.1" PORT = 4223 RemoteSwitch_UID = "jNw" Temperature_UID = "dFu" root = Tk() root.title("GUI") WMWIDTH, WMHEIGHT, WMLEFT, WMTOP = root.winfo_screenwidth(), root.winfo_screenheight(), 0, 0 root.overrideredirect(1) root.geometry("%dx%d+%d+%d" % (WMWIDTH, WMHEIGHT, WMLEFT, WMTOP)) #Temperature T = None def cb_temperature(temperature): #print('Temperature: ' + str(temperature/100.0) + ' °C') T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C\n') def shutdown(): os.system("sudo shutdown -h now") def reboot(): os.system("sudo shutdown -r now") def light_on(): rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_ON) def light_off(): rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_OFF) #def netio(): # os.system("sudo python /home/pi/GUI/tinkerforge/tinkerforge listen --enable-execute") def exit(): sys.exit() #b=Button(root, text= "NetIO", command=netio) #b.pack() # Create UI logo = PhotoImage(file="/home/pi/GUI/images/rpi_inside.gif") w1 = Label(root, image=logo height=32, width=32).grid(row=1, column=3) MyButton1 = Button(root, text="Shutdown", width=10, command=shutdown) MyButton1.grid(row=1, column=0) MyButton1 = Button(root, text="Reboot", width=10, command=reboot) MyButton1.grid(row=2, column=0) MyButton1 = Button(root, text="Exit", width=10, command=exit) MyButton1.grid(row=3, column=2) MyButton1 = Button(root, text="Licht an", width=10, command=light_on) MyButton1.grid(row=4, column=1) MyButton1 = Button(root, text="Licht aus", width=10, command=light_off) MyButton1.grid(row=5, column=1) T = Text(root, height=2, width=30) T.grid(row=6, column=3) # Create Tinkerforge objects ipcon = IPConnection() rs = RemoteSwitch(RemoteSwitch_UID, ipcon) t = Temperature(Temperature_UID, ipcon) ipcon.connect(HOST, PORT) t.register_callback(t.CALLBACK_TEMPERATURE, cb_temperature) t.set_temperature_callback_period(1000) # Start mainloop root.mainloop() Zitieren
Gast Broken_Mind Geschrieben June 24, 2014 at 14:37 Geschrieben June 24, 2014 at 14:37 Danke für eure beiden Antworten wieder etwas neues gelernt. Ich habe den Code mal ausprobiert und nun fügt er die Werte in das Textfeld aber diese werden nicht aktuallisiert sondern in eine neue Zeile nochmal geschrieben. Wie müsste ich da vorgehen? Das Textfeld entfernen und wieder mit neuem Wert erstellen? Zitieren
photron Geschrieben June 24, 2014 at 15:14 Geschrieben June 24, 2014 at 15:14 Da muss du zuerst den aktuellen Text aus dem Textfeld löschen. Das geht z.B, mit T.delete(1.0, END) bevor du mit T.insert() in der cb_temperature() Funktionen neuen einfügst. Etwa so: def cb_temperature(temperature): #print('Temperature: ' + str(temperature/100.0) + ' °C') T.delete(1.0, END) T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C\n') Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.