Piface eingang bitte Hilfeeeeeee ;-)

Hallo,
nach langem lesen in diesem Forum habe ich mich jetzt bei euch angemeldet.
Da ich ein ziemlicher Anfänger in Sachen Scripting bin,werde ich vielleicht den einen- oder anderen mit meinen “einfachen “ Fragen nerven.
Ich versichere aber, daß ich dieses nicht tun werde ohne mich vorher irgendwo anders zu informieren.
Ich schreibe dieses, da in anderen Foren – so wie ich feststellen musste - öfters die Fragen von Neulingen mit den Worten --


Lies doch erst einmal die Dokumentation bevor du uns fragst.--


abgeschmettert werden. Ich denke, das ist nicht gerade eine motivierende Antwort.
Ich möchte auch keine fertige Lösung , aber für einen kräftigen Schubser in die richtige Richtung währe ich sehr dankbar.
Wie wahrscheinlich viele vor mir, bin ich durch die Neugier auf den Raspberry Pi auf dieses Thema gekommen. Nach einigen kleinen eigenen Projekten
mit dem kleinen Rechner (alles Konsolenanwendungen), bin ich jetzt auf die Erweiterungsplatine Piface gestoßen.
Mit dieser Kombination möchte ich nun ein kleines Zählprogramm erstellen welches ein eigenes Userinterface hat.
Ich möchte “ ganz einfach “ an dem vierten Eingang den Zustand abfragen und wenn der Eingang -1- ist die spinBox um einen Zähler herauf setzen.
(Noch soll dieses mit dem Taster, später jedoch mit einer Lichtschanke geschehen.)
Ich habe auch nach langer Suche in allen möglichen Quellen keine Lösung zu meinem Problem gefunden.
Das Bestewäre doch -so wie ich es bisher versucht habe- beide Funktionen jeweils ineinem separaten Thread auszuführen?


Wer kann mir helfen?


Hier der Code:


Code:
################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from PyQt4 import QtCore, QtGui
 
 
from time import sleep
import time, thread
import pifacedigitalio as pfio
pfio.init()
 
 
def lesen(self):
        while (True):
            if pfio.digital_read(3)==1:
               #self.emit(SIGNAL("threadDone()"))        # ---------irgendwie so?
               print "Taster 4 ist gedrückt!"
               pfio.digital_write(3,1)
            elif pfio.digital_read(0)==0:
                print "Taster 4 ist aus!"
                pfio.digital_write(3,0)
 
try:
    fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s
 
 
 
 
def lesen1(self,):
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
 
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
            MainWindow.resize(400, 200)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.pushButton = QtGui.QPushButton(self.centralwidget)
            self.pushButton.setGeometry(QtCore.QRect(80, 110, 83, 41))
            self.pushButton.setObjectName(_fromUtf8("pushButton"))
            self.spinBox = QtGui.QSpinBox(self.centralwidget)
            self.spinBox.setGeometry(QtCore.QRect(80, 30, 231, 41))
            font = QtGui.QFont()
            font.setPointSize(32)
            font.setBold(True)
            font.setWeight(75)
            self.spinBox.setFont(font)
            self.spinBox.setWrapping(True)
            self.spinBox.setAlignment(QtCore.Qt.AlignCenter)
            self.spinBox.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons)
            self.spinBox.setObjectName(_fromUtf8("spinBox"))
            self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
            self.pushButton_2.setGeometry(QtCore.QRect(230, 110, 83, 41))
            self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
            MainWindow.setCentralWidget(self.centralwidget)
 
 
 
            self.retranslateUi(MainWindow)
            QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.spinBox.stepUp)
            #QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.zaehler)
            QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), self.spinBox.stepDown)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
 
 
 
        def zaehler(self):
            zaehler = pfio.digital_read(3)
            if zaehler == 1:
               self.spinBox.stepUp()  # -----geht nur wenn der Auf-Button gedrückt wird!
 
 
   def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Zähler", None, QtGui.QApplication.UnicodeUTF8))
            self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Auf", None, QtGui.QApplication.UnicodeUTF8))
            self.pushButton_2.setText(QtGui.QApplication.translate("MainWindow", "Ab", None, QtGui.QApplication.UnicodeUTF8))
 
 
 
 
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
 
 
thread.start_new_thread(lesen,( 1,))
thread.start_new_thread(lesen1,( 2,))
time.sleep(2)#----zu Testzwecken!
 
 
###############################################


Vielen Dank im voraus...


Pfefferminzplätzchen
 
Zuletzt bearbeitet von einem Moderator:
Hallo Pfefferminzplätzchen,

zu deiner Frage kann ich leider jetzt keine Antwort geben, jedoch wollte ich dir den Tip geben, den Code in den Codetags einzufügen: [ CODE ] und [ /CODE ] (ohne Leerzeichen)
Dann lässt sich der Code leichter lesen und Symbole wie ; ) werden nicht zu ;) umgewandelt
Beispiel:

(Ohne Code Tags)
Hello World ;)

(Mit Code Tags)
Code:
Hello World ;)
 
Grundsätzlich ist der Ansatz mit den Signalen schon richtig - "einfach so" aus einem anderen Thread auf die GUI Elemente zugreifen kann schnell schiefgehen ;)
aber für einen kräftigen Schubser in die richtige Richtung
QThread QThread Class Reference
Wegen: [PyQt] Threads with PyQt. Qt's or Python's?
Pitfalls: youre-doing-it-wrong
Beispiele:
python - How to signal from a running QThread back to the PyQt Gui that started it? - Stack Overflow
python - Example of the right way to use QThread in PyQt? - Stack Overflow (und nein, das sind nicht die erstbesten Beispiele aus der Googlesuche - zumindest auf die Schnelle scheinen die Lösungen ok zu sein (auch wenn mein letzter Kontakt mit Qt schon etwas her ist).
Der Vollständigkeit halber könnte man noch select https://docs.python.org/2/library/select.html oder, falls sich pfio-Interaktionen auf "non-blocking" umstellen lassen, QTimer http://pyqt.sourceforge.net/Docs/PyQt4/qtimer.html erwähnen - beim letzteren kann man dann in regelmäßigen Abständen, ganz ohne Threads, irgendeine Aktion ausführen lassen (Bsp: http://thecodeinn.blogspot.de/2013/07/tutorial-pyqt-digital-clock.html Abschnitt "GUI").

Eine Anmerkung: auch wenn zusätzliche Textformatierung in vielen Fällen durchaus Sinn macht (z.B Aufzählungen/Listen/Emphasis) sollte man damit nicht übertreiben ;) - z.B lässt sich in jedem halbwegs modernen Browser die minimale, sowie voreingestellte, Schriftgröße auf "komfortablere" Werte umstellen - oft sogar seitenspezifisch. Sprich: zumindest bei mir werden die Buchstaben in Deinem Text genauso groß dargestellt wie der Mauskursor ;)
 
Zurück
Oben