LEDs mit GUi ansteuern problem

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
rusb
User
Beiträge: 9
Registriert: Donnerstag 20. Oktober 2016, 10:53

Hallo Leute,
Ich habe folgendes Problem: Ich wollte eine einfach GUI erzeugen mit dem man per Knopfdruck die LED auf der Steckplatine die mit dem Raspberry ist
zu an und auszuschalten. Die gui habe ich mit qt-Designer gebaut


Dann habe ich ein Pythonskript erstellt welche auf die Gui zugriff nimmt und im Skript noch mal die Funktion realisiert

Code: Alles auswählen

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.uic import *
import RPi.GPIO as gpio

gpio.setmode(gpio.BOARD)
gpio.setwarnings(False)
gpio.setup(26, gpio.OUT, gpio.LOW) 


def buttonKlick_1():
    gpio.output(26, gpio.HIGH)
    w.label.setText("LED ist an")


def buttonKlick_2():
    gpio.output(26, gpio.LOW)
    w.label.setText("LED ist aus") 




app = QApplication(sys.argv)
w = loadUi("LED.ui")

w.connect(w.pushButton1,SIGNAL("clicked()"),buttonKlick_1)
w.connect(w.pushButton2,SIGNAL("clicked()"),buttonKlick_2)
#w.connect(w.MeineAction,SIGNAL("triggered()"),checkFunktion)
#w.connect(w.deineAction,SIGNAL("triggered()"),checkFunktion)


w.show()
sys.exit(app.exec_())
wenn ich das jedoch ausführe kommt folgender Fehler auf der Konsole:

Pull_up_down parameter is not valid for outputs

Hat einer eine Idee was ich da falsch gemacht habe? oder eine andere Idee wie man das umsetzen kann?
Zuletzt geändert von Anonymous am Freitag 4. November 2016, 17:49, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@rusb: Das ist nicht die komplette Fehlermeldung, da fehlt der Traceback der darüber steht und einem sagt *wo* in dem Quelltext der Fehler aufgetreten ist. In diesem Fall lässt sich das leicht erraten, aber generell hilft es uns beim helfen wenn wir die Information direkt bekommen.

Der Traceback sollte Dich auf Zeile 9 hinweisen, wo die Argumente nicht zur Funktionssignatur passen. Schau Dir da mal an was bei der `setup()`-Funktion für Argumente erwartet werden und was Du stattdessen übergibst.

Sternchen-Importe sind keine gute Idee. Da weiss man dann nicht mehr wo welcher Name eigentlich her kommt und ausserdem besteht die Gefahr von Namenskollisionen.

Warum schaltest Du die Warnungen vom GPIO-Modul aus? Die wollen einem ja etwas sagen. Das sollte man nicht ignorieren sondern die Fehler korrigieren. Also zum Beispiel das man am Ende immer dafür sorgen sollte das die `cleanup()`-Funktion aufgerufen wird.

Magische Zahlen sollte man durch Konstanten ersetzen. Wenn Du die Pin-Nummer mal ändern willst, müsstest Du durch das ganze Programm gehen und die überall anpassen. Wenn Du die einmal am Anfang als Konstante definierst, brauchst Du sie nur dort einmal ändern.

Namen sollen dem Leser vermitteln was der Wert dahinter im Kontext des Programms bedeutet. Irgendwelche total generischen und dann auch noch durchnummerierten Namen tun das nicht. Und einbuchstabige Namen wie `w` tun das auch nur sehr selten.

Du verwendest eine alte und etwas fehleranfälligere Methode um die Signale zu verbinden. Mehr Schreibarbeit ist das auch als die modernere Variante:

Code: Alles auswählen

window.switchOnButton.clicked.connect(switch_led_on)
window.switchOffButton.clicked.connect(switch_led_off)
Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise ein einer Funktion die `main()` heisst. Und bei GUIs kommst Du nicht wirklich um objektorientierte Programmierung (OOP) herum. Das geht hier im Beispiel gerade noch so weil der Programmzustand global in dem GPIO-Ausgang steckt.
Antworten