ich möchte ein Infoboard erstellen, bei welchem man über extern verbaute Hardwaretaster, welche über ein FT232H USB-GPIO Modul angebunden werden, die Anzeige ändern kann.
Dazu habe ich eine Funktion erstellt, die über den QTimer zyklisch aufgerufen wird und den Status der Taster abfragt und infolgedessen die URL anpasst.
Leider habe ich aktuell das Problem, dass beim ersten Aufruf der Funktion zum Auswerten der Taster die GUI unvermittelt geschlossen wird.
In der Konsolenausgabe erhalte ich jeweils nur die Meldung === RESTART: Shell ===. Weitere Fehlermeldungen oder ähnliches habe ich nicht.
Meine bisherigen Debugging-Versuche zeigen mir, dass bereits die erste if-Anweisung schon nicht mehr durchlaufen wird.
Ich bin momentan ratlos, wo mein Fehler liegt und würde mich über einen hilfreichen Tipp als Lösungsansatz sehr freuen.
Vielen Dank für Eure Hilfe!
Code: Alles auswählen
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QLabel, QLayout, QHBoxLayout, QVBoxLayout, QGraphicsView
from PyQt5 import uic
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from time import strftime
import threading
import time
import board
import digitalio
class UI(QMainWindow):
def __init__(self):
super(UI, self).__init__()
# Tastereingänge
key_1 = digitalio.DigitalInOut(board.C0)
key_1.direction = digitalio.Direction.INPUT
key_2 = digitalio.DigitalInOut(board.C1)
key_2.direction = digitalio.Direction.INPUT
key_3 = digitalio.DigitalInOut(board.C2)
key_3.direction = digitalio.Direction.INPUT
self.currDP = 1
self.setWindowTitle('Infoboard')
self.setWindowFlag(Qt.FramelessWindowHint)
self.setGeometry(-2560,0,2560,1300)
# Definition der Widgets für die Zeilenbereiche
self.main_widget = QWidget(self)
self.line1_widget = QWidget(self)
self.line2_widget = QWidget(self)
self.line3_widget = QWidget(self)
self.line4_widget = QWidget(self)
# Einrichtung der Widget-Layouts
self.main_layout = QVBoxLayout(self.main_widget)
self.line1_layout = QHBoxLayout(self.line1_widget)
self.line2_layout = QHBoxLayout(self.line2_widget)
self.line3_layout = QHBoxLayout(self.line3_widget)
self.line4_layout = QHBoxLayout(self.line4_widget)
# Definition der Zeilenhöhen
self.line1_widget.setFixedHeight(100)
# Size Constraints ??? TBD
#self.main_layout.sizeConstraint = QLayout.SetFixedSize
# Kopfzeile
self.line1_left = QLabel(self)
self.line1_left.setPixmap(QPixmap('image_head.png').scaled(250,50,aspectRatioMode = 2))
self.line1_center = QLabel(self)
self.line1_center.setText('Informationsboard')
self.line1_center.setAlignment(Qt.AlignCenter)
self.line1_center.setFont(QFont('Arial', 35))
self.line1_right = QLabel(self)
self.line1_right.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
self.line1_right.setFont(QFont('Arial', 20))
# Kopfzeile zusammenstellen
self.line1_layout.addWidget(self.line1_left)
self.line1_layout.addWidget(self.line1_center)
self.line1_layout.addWidget(self.line1_right)
self.line1_widget.setLayout(self.line1_layout)
# Timer für Ausgabe der aktuellen Uhrzeit
self.timer = QTimer()
self.timer.timeout.connect(self.akt_uhrzeit)
self.timer.start(1000)
# Browserfenster
self.line2_left = QWebEngineView()
self.line2_right = QWebEngineView()
self.line2_left.setUrl(QUrl("https://www.google.de/"))
self.line2_right.setUrl(QUrl("https://www.ccc.de/"))
# Browserfenster zusammenstellen
self.line2_layout.addWidget(self.line2_left)
self.line2_layout.addWidget(self.line2_right)
self.line2_widget.setLayout(self.line2_layout)
# Masterlayout zusammenstellen
self.main_layout.addWidget(self.line1_widget)
self.main_layout.addWidget(self.line2_widget)
self.main_widget.setLayout(self.main_layout)
# Masterlayout ausgeben
self.setCentralWidget(self.main_widget)
# Timer für Auslesen der Taster
self.taster_timer = QTimer()
self.taster_timer.timeout.connect(self.change_dienstplan)
self.taster_timer.start(2500)
def akt_uhrzeit(self):
self.line1_right.setText(strftime('%d.%m.%y - %H:%M:%S'))
def change_dienstplan(self):
print("Start")
check = self.key_1.value
print(check)
if check == False:
print("Inside")
if self.currDP != 1:
self.currDP = 1
self.line2_left.setUrl(QUrl("https://www.bing.de/"))
elif self.key_2.value == False:
if self.currDP != 2:
self.currDP = 2
self.line2_left.setUrl(QUrl("https://www.youtube.com/"))
elif self.key_3.value == False:
if self.currDP != 3:
self.currDP = 3
self.line2_left.setUrl(QUrl("https://www.microsoft.com/"))
else:
print("None")
pass
# Initialize the App
class GUI_Action():
def start_gui():
app = QApplication(sys.argv)
app.setApplicationName('Infoboard')
UIWindow = UI()
UIWindow.show()
app.exec_()
# Setting Threads
gui_thread = threading.Thread(target=GUI_Action.start_gui, args=())
gui_thread.start()