Ein kurzes Vorwort: Ich komme eigentlich aus der Hardwarenahen Programmierung und benutze Python als Mittel zum Zweck. Aus dem Grund habe ich meine Probleme mit Objektorientierter Programmierung. Vorkenntnisse in Assembler, C und Labview sind vorhanden...
Ich habe mehrere Messgeräte/Aktoren/Sensoren (Prüffeld) welche ich bisher als via Python auf der Konsole ausgelesen und verarbeitet habe. Für mich reicht es...alles super.
Jetzt muss ich es aber bedienbar für andere machen. Also einen "Start" Button und eine Anzeige was passiert. Naja...und vielleicht irgendwann ein bisschen mehr KlickiBunti.
Ich habe mit dem QTDesigner Oberflächen erstellt und die machen, was sie sollen, so lange ich feste Werte vorgebe. Jetzt sind meine ganzen externen Geräte bereits fertig geschrieben und in einzelnen Funktionen gekapselt. Das hängt auch mit teilweise vorhanden State-Machines zusammen.
Mein Problem ist jetzt, wie ich ein altes print("Hello World") in ein Textfeld in PyQt bekomme.
Der Beispielcode sieht so aus:
Code: Alles auswählen
import sys
from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTimer
status=0
def timeslot():
global status
status+=1
print(status)
# geht nicht: LogWindow.appendPlainText(str(status))
if (status<10):
QTimer.singleShot(1000, timeslot)
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('test.ui', self)
self.show()
self.OK.clicked.connect(self.OK_pressed)
def OK_pressed(self):
self.LogWindow.appendPlainText(str(status))
self.OK.setEnabled(False)
timeslot()
def main():
app = QtWidgets.QApplication(sys.argv)
window = Ui()
app.exec_()
if __name__ == "__main__":
main()
Vom Prinzip her will ich den Wert der Variable "status" in das Feld LogWindow schreiben.
Die Variable wird auf der Konsole bis 10 hochgezählt -> Funktioniert also. Auch wird die Variable (einmalig) beim drücken des Buttons in das Textfeld geschrieben. Die in Frage kommende Zeile ist mit # auskommentiert.
Als Fehlermeldung kommt (egal ob es ein Syntaxfehler oder sonstwas in der Zeile ist) ein: Process finished with exit code 1073741845
Das oben gezeigte ist nur das Problem. In der "Timeslot" befindet sich in meinem Fall eine StateMachine, welche einen Teststand steuert und ihre Ausgaben auf der Konsole macht. Das würde ich gerne umbiegen.
Ich hoffe ihr konnt mir helfen...
Mirko