Mit OOP beginnen wir erst nächste Woche. Aber auch nur im Ansatz. Das aller nötigste, mehr nicht. Ich versuche einfach selbst irgendwas hinzubekommen. Ich wundere mich ja schon, wie ich das (s. unten) hinbekommen habe, obwohl nur Variablen, Dateien einlesen, Texte zerlegen und wieder zusammenfügen und speichern gemacht haben. Sonst nur DSGVO, BDSG, TOM etc.
Code: Alles auswählen
# -*- coding: utf-8 -*-
'''
Created on Tue Sep 27 11:41:12 2022
@author: Student
'''
#import der Funktionen für GUI
import tkinter
import tkinter as tk
from tkinter import*
from PIL import Image, ImageTk
#Zufallswerte ermitteln
import random
rein = random.randint(0, 475)
raus = random.randint(0, rein)
blockiert = random.choice([True, False])
vermietet = random.randint(0, 15)
#Zeitstempel
from datetime import datetime
eingangszeit = datetime.now().time().replace(microsecond=0)
ausfahrtszeit = datetime.now().time().replace(microsecond=0)
#Konsole Zeitausgabe
print(eingangszeit)
#Anzahl freie Stellplätze
status = 500 - rein - vermietet + raus
#Anzahl belegte Stellplätze
belegt = 500 - status
#Anzahl frei Stellplätze nach gezogenem Ticket
status_ticket = status - 1
#Anzahl belegte Stellplätze nach gezogenem Ticket
belegt_ticket = 500 - status_ticket
#Konsole Ausgabe der Zufallwerte als Text
if rein == 1:
print(rein, 'Fahrzeug reingefahren\n')
else:
print(rein, 'Fahrzeuge reingefahren\n')
if vermietet == 1:
print(vermietet, 'Stellplätze vermietet\n')
else:
print(vermietet, 'Stellplätze vermietet\n')
if raus == 1:
print(raus, 'Fahrzeug rausgefahren\n')
else:
print(raus, 'Fahrzeuge rausgefahren\n')
'''
Bei Ausfahrtberechunng steht die-1 für die pauschal berechneten 3.50 € für
die erste angefangene Stunde.
Bspw. werden bei einer Gesmatparkdauer von 11 Stunden, 10 Stunden
zu je 2.00 € berechnet und im Nachgnag 3.50 addiert. Somit wären wir
Gebührentechnisch wieder bei 11 Stunden Gesamtparkdauer.
'''
ausfahrt_berechnung = random.randint(1, 24)
gebuehren = ((ausfahrt_berechnung - 1) * 2) + 3.50
#------------------------------------------------------------------------------
#GUI
window = Tk()
#Programmfenster beginn
window.geometry('1920x1080')
window.title('Parkhausüberwachungsmonitor')
icon = PhotoImage(file = 'Zeichen_314-50_-_Parkhaus,_Parkgarage,_StVO_2017.png')
window.iconphoto(True, icon)
window.config(bg = '#262626')
#Logo und Programmname
canvas_1 = Canvas(window)
frame_1 = Frame()
frame_1.place(x = 50, y = 50, width = 50, height = 50)
img_1 = ImageTk.PhotoImage(Image.open('Zeichen_314-50_-_Parkhaus,_Parkgarage,_StVO_2017-Anwendung.png'))
label_1 = Label(frame_1, image = img_1)
label_1.pack()
label_Program = Label(window,
text='Parkhaussysteme',
font = ('Helvetica 25 bold'),
bg='#262626', fg='#FFFFFF')
label_Program.place(x = 120, y = 52.5)
#Grafiken und Displayanzeigen (Labels)
#Kassenautomat 1
canvas_2 = Canvas(window)
frame_2 = Frame()
frame_2.place(x = 500, y = 50, width = 498, height = 463)
img_2 = ImageTk.PhotoImage(Image.open('Kassenautomat-1.png'))
label_2 = Label(frame_2, image = img_2)
label_2.pack()
kassenautomat_1_display_label = Label(window,
justify = 'left',
text = 'Erste Std. 3.50 € \nJede weitere Std. 2.00 €'
'\n\nBitte Parkticket\neinstecken!',
font = ('Helvetica 10 bold'),
bg='#E6E3E3', fg='black')
kassenautomat_1_display_label.place(width = 150, height = 100, x = 555, y = 175)
#Kassenautomat 2
canvas_3 = Canvas(window)
frame_3 = Frame()
frame_3.place(x = 1050, y = 50, width = 498, height = 463)
img_3 = ImageTk.PhotoImage(Image.open('Kassenautomat-2.png'))
label_3 = Label(frame_3, image = img_3)
label_3.pack()
kassenautomat_2_display_label = Label(window,
justify = 'left',
text = 'Erste Std. 3.50 € \nJede weitere Std. 2.00 €'
'\n\nBitte Parkticket\neinstecken!',
font = ('Helvetica 10 bold'),
bg='#E6E3E3', fg='black')
kassenautomat_2_display_label.place(width = 150, height = 100, x = 1105, y = 175)
#Einfahrt
canvas_4 = Canvas(window)
frame_4 = Frame()
frame_4.place(x = 500, y = 575, width = 304, height = 463)
img_4 = ImageTk.PhotoImage(Image.open('Ticket-Ein.png'))
label_4 = Label(frame_4, image = img_4)
label_4.pack()
einfahrt_display_label = Label(window,
justify = 'left',
anchor = N,
text = '\nWillkommen\n'
'Bitte grüne Taste drücken',
font = ('LCD 5'),
bg='#B5E61D', fg='black')
einfahrt_display_label.place(width = 136, height = 54, x = 597, y = 662)
#Ausfahrt
canvas_5 = Canvas(window)
frame_5 = Frame()
frame_5.place(x = 854, y = 575, width = 304, height = 463)
img_5 = ImageTk.PhotoImage(Image.open('Ticket-Aus.png'))
label_5 = Label(frame_5, image = img_5)
label_5.pack()
ausfahrt_display_label = Label(window,
justify = 'left',
anchor = N,
text = '\nBitte Ticket einstecken',
font = ('LCD 5'),
bg='#B5E61D', fg='black')
ausfahrt_display_label.place(width = 136, height = 54, x = 951, y = 662)
#Parkleitsysteme
canvas_6 = Canvas(window)
frame_6 = Frame()
frame_6.place(x = 1204, y = 575, width = 664, height = 215)
img_6 = ImageTk.PhotoImage(Image.open('Parkleitsystem-Neumarkt.png'))
label_6 = Label(frame_6, image = img_6)
label_6.pack()
pls_neumarkt_display_label = Label(window,
justify = 'left',
text = '750m ' + (str(status) + ' freie Stellplätze'),
font = '5by7 30',
bg='black',
fg='white')
pls_neumarkt_display_label.place(width = 609, height = 68, x = 1234, y = 696)
canvas_7 = Canvas(window)
frame_7 = Frame()
frame_7.place(x = 1204, y = 825, width = 664, height = 215)
img_7 = ImageTk.PhotoImage(Image.open('Parkleitsystem-Deutzer_Bruecke.png'))
label_7 = Label(frame_7, image = img_7)
label_7.pack()
pls_deutzer_bruecke_display_label = Label(window,
justify = 'left',
text = '650m ' + (str(status)
+ ' freie Stellplätze'),
font = '5by7 30',
bg='black',
fg='white')
pls_deutzer_bruecke_display_label.place(width = 609, height = 68, x = 1234, y = 946)
#Buttons
def btn_stoerung():
kassenautomat_1_display_label.config(text = 'Bitte wenden Sie\nsich an die\nParkhausaufsicht!')
kassenautomat_2_display_label.config(text = 'Bitte wenden Sie\nsich an die\nParkhausaufsicht!')
einfahrt_display_label.config(text = '\nParkhaus gesperrt')
ausfahrt_display_label.config(text = '\nParkhaus gesperrt')
pls_neumarkt_display_label.config(text = 'Parkhaus gesperrt')
pls_deutzer_bruecke_display_label.config(text = 'Parkhaus gesperrt')
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(belegt) + ' belegt\n\n'
+ 'Parkhaus gesperrt'), fg = '#FFDE35')
#Konsole
print('Störung; Parkhaus gesperrt')
stoerung = Button(window,
text = 'Störung', font = ('Helvetica 20 bold'),
width = 20, height = 2,
fg = 'black', bg = '#FFDE35',
activeforeground = 'black',
activebackground = '#FFDE35',
command = btn_stoerung)
stoerung.place(x = 50, y = 149)
def btn_polizei():
kassenautomat_1_display_label.config(text = 'Bitte wenden Sie\nsich an die\nParkhausaufsicht!')
kassenautomat_2_display_label.config(text = 'Bitte wenden Sie\nsich an die\nParkhausaufsicht!')
einfahrt_display_label.config(text = '\nParkhaus gesperrt')
ausfahrt_display_label.config(text = '\nParkhaus gesperrt')
pls_neumarkt_display_label.config(text = 'Parkhaus gesperrt')
pls_deutzer_bruecke_display_label.config(text = 'Parkhaus gesperrt')
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(belegt) + ' belegt\n\n'
+ 'Parkhaus gesperrt'), fg = '#0012FF')
#Konsole
print('Polizeieinsatz; Parkhaus gesperrt')
polizei = Button(window,
text = 'Polizei Einsatz', font = ('Helvetica 20 bold'),
width = 20, height = 2,
fg = 'white', bg = '#0012FF',
activeforeground = 'white',
activebackground = '#0012FF',
command = btn_polizei)
polizei.place(x = 50, y = 289)
def btn_feuerwehr():
kassenautomat_1_display_label.config(text = 'Bitte verlassen Sie\nzügig das Parkhaus!\n'
'\nSteigen Sie nicht\nins Auto!')
kassenautomat_2_display_label.config(text = 'Bitte verlassen Sie\nzügig das Parkhaus!\n'
'\nSteigen Sie nicht\nins Auto!')
einfahrt_display_label.config(text = '\nParkhaus gesperrt')
ausfahrt_display_label.config(text = '\nParkhaus gesperrt')
pls_neumarkt_display_label.config(text = 'Parkhaus gesperrt')
pls_deutzer_bruecke_display_label.config(text = 'Parkhaus gesperrt')
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(belegt) + ' belegt\n\n'
+ 'Parkhaus gesperrt\n\n' + 'Feuerwehr alarmiert'), fg = '#FF0000')
#Konsole
print('Feuerwehreinsatz; Parkhaus gesperrt')
feuerwehr = Button(window,
text = 'Feuerwehr Einsatz', font = ('Helvetica 20 bold'),
width = 20, height = 2,
fg = 'white', bg = '#FF0000',
activeforeground = 'white',
activebackground = '#FF0000',
command = btn_feuerwehr)
feuerwehr.place(x = 50, y = 429)
def btn_stoerung_behoben():
kassenautomat_1_display_label.config(text = 'Erste Std. 3.50 € \nJede weitere Std. 2.00 €'
'\n\nBitte Parkticket\neinstecken!')
kassenautomat_2_display_label.config(text = 'Erste Std. 3.50 € \nJede weitere Std. 2.00 €'
'\n\nBitte Parkticket\neinstecken!')
einfahrt_display_label.config(text = '\nWillkommen\nBitte grüne Taste drücken')
ausfahrt_display_label.config(text = '\nBitte Ticket einstecken')
pls_neumarkt_display_label.config(text = '750m ' + (str(status) + ' freie Stellplätze'))
pls_deutzer_bruecke_display_label.config(text = '650m ' + (str(status) + ' freie Stellplätze'))
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(vermietet) + ' vermietet'
+ '\n\n' + (str(status) + ' freie Stellplätze\n')), fg = '#96FF5C')
#Konsole
print('Normalbetrieb wieder augenommen')
stoerung_behoben = Button(window,
text = 'Störung behoben', font = ('Helvetica 20 bold'),
width = 20, height = 2,
fg = 'white', bg = '#008000',
activeforeground = 'white',
activebackground = '#008000',
command = btn_stoerung_behoben)
stoerung_behoben.place(x = 50, y = 569)
status_anzeige_label = Label(window,
justify = 'left',
anchor = NW,
text = '',
font = ('Helvetica 15'),
bg='#262626', fg='#96FF5C')
status_anzeige_label.place(width = 350, height = 191, x = 50, y = 709)
def btn_ticket_ziehen():
global status
global belegt
status_ticket = status - 1
belegt_ticket = belegt + 1
status -= 1
belegt += 1
print(status_ticket)
einfahrt_display_label.config(text = eingangszeit)
pls_neumarkt_display_label.config(text = '750m ' + (str(status_ticket) + ' freie Stellplätze'))
pls_deutzer_bruecke_display_label.config(text = '650m ' + (str(status_ticket) + ' freie Stellplätze'))
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(vermietet) + ' vermietet'
+ '\n\n' + (str(status_ticket) + ' freie Stellplätze\n')), fg = '#96FF5C')
def druecken(d):
ticket_taste_gedrueckt = tk.PhotoImage(file = 'Ticket-Ein_Taste_gedrueckt.png')
ticket_ziehen['image'] = ticket_taste_gedrueckt
ticket_ziehen.image = ticket_taste_gedrueckt
def loslassen(d):
ticket_taste_ungedrueckt = tk.PhotoImage(file = 'Ticket-Ein_Taste_ungedrueckt.png')
ticket_ziehen['image'] = ticket_taste_ungedrueckt
ticket_ziehen.image = ticket_taste_ungedrueckt
ticket_taste_ungedrueckt = tk.PhotoImage(file = 'Ticket-Ein_Taste_ungedrueckt.png')
ticket_ziehen = Button(window, image = ticket_taste_ungedrueckt, command = btn_ticket_ziehen,
borderwidth = 0, bg = '#5F5F5F', relief = 'flat', activebackground = '#5F5F5F')
ticket_ziehen.image = ticket_taste_ungedrueckt
ticket_ziehen.place(x = 675, y = 925)
ticket_ziehen.bind('<ButtonPress-1>', druecken)
ticket_ziehen.bind('<ButtonRelease-1>', loslassen)
beenden = Button(window,
text = 'Programm schließen', font = ('Helvetica 20 bold'),
width = 20, height = 2,
fg = 'black', bg = '#F1F1F1',
activeforeground = 'black',
activebackground = '#F1F1F1',
command = window.destroy)
beenden.place(x = 50, y = 950),
#------------------------------------------------------------------------------
#Programmausführung
if status < 16 and not blockiert:
#Parkleitsysteme
pls_neumarkt_display_label.config(text = 'Parkhaus belegt')
pls_deutzer_bruecke_display_label.config(text = 'Parkhaus belegt')
#Statusanzeige
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(belegt) + ' belegt\n\n'
+ 'Parkhaus belegt'))
#Konsole
print(status, 'Stellplätze frei\n')
print('Parkhaus belegt')
elif status > 15 and not blockiert:
#Einfahrt
einfahrt_display_label.config(text = '\nWillkommen\n'
'Bitte grüne Taste drücken')
#Statusanzeige
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(vermietet) + ' vermietet'
+ '\n\n' + (str(status) + ' freie Stellplätze\n')))
#Konsole
print(status, 'Stellplätze frei\n')
#Konsole
#Kassenautomat, wenn noch kein Parkticket eingesteckt
print('\nErste Std. 3.50 €')
print('Jede weitere Std. 2.00 €')
#Konsole
#Kassenautomat nach dem Parkticket eingesteckt wurde
print('\nParkdauer:', ausfahrt_berechnung, 'Std.')
print('Zu Zahlen: {0:5.2f} €\n'.format(gebuehren))
else:
#Einfahrt
einfahrt_display_label.config(text = '\nParkhaus gesperrt')
ticket_ziehen.config = Button(window, image = ticket_taste_ungedrueckt, state = 'disabled')
#Parkleitsysteme
pls_neumarkt_display_label.config(text = 'Parkhaus gesperrt')
pls_deutzer_bruecke_display_label.config(text = 'Parkhaus gesperrt')
#Statusanzeige
status_anzeige_label.config(text = 'Statusanzeige:\n\n' + (str(belegt) + ' belegt\n\n'
+ 'Parkhaus gesperrt\n\n' + 'Ein-/Ausfahrt blockiert'), fg = '#FFDE35')
#Konsole
print(status, 'Stellplätze frei\n\nEin-/Ausfahrt blockiert')
#Konsole
print('Parkhaus gesperrt')
#Konsole
#Display Kassenautomaten
print('Bitte wenden Sie sich an die Parkhausaufsicht!')
#------------------------------------------------------------------------------
#Programmfenster ende
window.update()
window_width = window.winfo_width()
window_height = window.winfo_height()
screen_width = window.winfo_screenmmwidth()
screen_heigth = window.winfo_screenheight()
x = int((screen_width /2) - (window_width / 2))
y = int((screen_heigth /2) - (window_height / 2))
window.mainloop()