tkinter Button... vier Probleme

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Hallo zusammen,

folgenden wundervollen Codeschnipsel habe ich. Nicht wundern, dass da keine zweites Bild im Code ist. Habe schon alle mögliche versucht und daher erst mal den Basiscode gelassen

Code: Alles auswählen

window = Tk()
window.geometry("80x89")
window.config(bg = '#262626')
status = 50
def btn_ticket_ziehen():
    if ticket_ziehen and status > 45:
        status_aktuell = status - 1
        print(status_aktuell)
ticket_taste_ungedrueckt = PhotoImage(file = 'Ticket-Ein_Taste_ungedrueckt.png')
img_label = Label(image = ticket_taste_ungedrueckt)
ticket_ziehen = Button(window, image = ticket_taste_ungedrueckt, command = btn_ticket_ziehen,
                        borderwidth = 0, bg = '#262626')
ticket_ziehen.pack()
ticket_ziehen.image = ticket_taste_ungedrueckt
window.mainloop()
Probleme:
- Immer, wenn ich den Button anklicke, soll von einer Zahl -1 abgezogen werden. (Die 50 ist nur als Beispiel)
Also Klick = 49, noch ein Klick = 48, weiterer Klick = 47 etc. Aber es wird nur einmal abgezogen.

- Wie ihr seht, hat der Button ja ein Bild. Wenn ich klicke, soll sich das Bild ändern. Und wenn ich wieder loslasse, das Ursprungsbild erscheinen. Hierfür habe ich zwar Codebeispiele auf stackoverflow gefunden, die haben aber irgendwie nicht funktioniert.

- Und jetzt das, was mich richtig stört. Ich habe Stunden gesucht und nichts gefunden, außer für Beispiele mit original Hintergrundfarbe im Fenster, was bei mir natürlich nicht funktioniert hat, weil ich

Code: Alles auswählen

window.config(bg = '#262626')
habe. Wie bekomme ich am linken Rand die Kante weg, wenn ich den Button anklicke?

Code: Alles auswählen

relief = 'flat'
funktioniert nicht, das kann ich im Voraus sagen.

- Ich wollte auch, dass der Button sich nicht immer so leicht nach rechts bewegt, beim Klicken. Dazu habe ich im Netz nur als Beispiel

Code: Alles auswählen

state = 'disabled'
gefunden. Das deaktiviert den Button komplett.

Lange Rede, kurzer Sinn. ich bin am Verzweifeln. Ich werden immer nur nach ähnlichen Problemen fündig. Die haben dann irgendwelche Bedingungen drin mit Farbe des Fensters und so was. Irgendwie immer was abweichendes. wozu ich nicht im Stande bin, es zu ändern. Besser gesagt, nachdem ich das wegnehme, was ich nicht brauche, funktioniert der Beispielcode nicht mehr, sodass es nichts bringt, wenn ich den ändere mit meinen Bildern usw.
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst also gar keinen Button benutzen, weil Du nichts was einen Button ausmacht behalten willst. Dann versuch auch nicht einen Button zu verändern, sondern programmiere das was Du willst, als z.B. mit einem Label selbst, indem Du die passenden Events abfängst.
Was Du gleich reparieren solltest, ist, dass Du keine globalen Variblen verwendest und sofort eine passende Klasse definierst. Auch den *-Import am Anfang willst Du loswerden.
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Danke für die Antwort, habe mein Problem gelöst, war wohl zu müde gestern. So sieht der Code jedenfalls aus und funktioniert genau, wie ich es will. Das einzige, was ich nicht auf die Kette bekomme, ist, dass sich das Bild auf dem Button ändert, wenn ich klicke und wieder zurück ändert, wenn ich loslasse:

Code: Alles auswählen

def btn_ticket_ziehen():
    global status
    status_ticket = status - 1
    status -= 1
    print(status_ticket)

ticket_taste_ungedrueckt = PhotoImage(file = 'Bildpfad_1')
img_label = Label(image = ticket_taste_ungedrueckt)
ticket_ziehen = Button(window, image = ticket_taste_ungedrueckt, command = btn_ticket_ziehen,
                        borderwidth = 0, bg = '#5F5F5F', relief = 'flat', activebackground = '#5F5F5F')
ticket_ziehen.place(x = 675, y = 925)
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Also Bildwechsel geht jetzt auch bei Klick. Wenn ich loslasse ändert es sich aber nicht zurück, obwohl ich das else drin habe.

Code: Alles auswählen

def btn_ticket_ziehen():
    global status
    status_ticket = status - 1
    status -= 1
    print(status_ticket)
    
    if(ticket_ziehen):
        ticket_ziehen.config(image = ticket_taste_gedrueckt)
    
    else:
        ticket_ziehen.config(image = ticket_taste_ungedrueckt)

ticket_taste_ungedrueckt = PhotoImage(file = 'Ticket-Ein_Taste_ungedrueckt.png')
ticket_taste_gedrueckt = PhotoImage(file = 'Ticket-Ein_Taste_gedrueckt.png')

img_label = Label(image = ticket_taste_ungedrueckt)
ticket_ziehen = Button(window, image = ticket_taste_ungedrueckt, command = btn_ticket_ziehen,
                        borderwidth = 0, bg = '#5F5F5F', relief = 'flat', activebackground = '#5F5F5F')

ticket_ziehen.place(x = 675, y = 925)
Benutzeravatar
bi3mw
User
Beiträge: 11
Registriert: Mittwoch 19. Oktober 2022, 23:14

Wie ihr seht, hat der Button ja ein Bild. Wenn ich klicke, soll sich das Bild ändern. Und wenn ich wieder loslasse, das Ursprungsbild erscheinen. Hierfür habe ich zwar Codebeispiele auf stackoverflow gefunden, die haben aber irgendwie nicht funktioniert.
Wenn ich Dein Problem mit dem Bildwechsel richtig verstehe dann musst Du Maus-Events an die Ereignisse binden ( <ButtonPress-1> und <ButtonRelease-1> ). Hier ein kurzes Code-Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# -*-coding: utf-8-*-

from tkinter import *

win=Tk()
win.geometry("700x350")

def on_click(event):
   button["text"]="Neues Bild"

def on_release(event):
   button["text"]="Vorheriges Bild"

button=Button(win, text="Klick den Button..", font=('Calibri 18 bold'))
button.pack(pady=60)
button.bind("<ButtonPress-1>", on_click)
button.bind("<ButtonRelease-1>", on_release)

win.mainloop()
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

@bi3mw: nach Konvention wird immer mit 4 Leerzeichen pro Ebene eingerückt, nicht drei. *-Importe darf man nicht verwenden, weil man damit nicht nachvollziehen kann, woher welcher Name kommt. Globale Variablen darf man nicht verwenden, weil man damit nicht mehr nachvollziehen kann, wie sich welche Werte ändern.

Code: Alles auswählen

import tkinter as tk

def on_click(event):
    button = event.widget
    button["text"] = "Neues Bild"

def on_release(event):
    button = event.widget
    button["text"] = "Vorheriges Bild"

def main():
    win = tk.Tk()
    button=tk.Button(win, text="Klick den Button..", font=('Calibri 18 bold'))
    button.pack(padx=30, pady=30)
    button.bind("<ButtonPress-1>", on_click)
    button.bind("<ButtonRelease-1>", on_release)
    win.mainloop()

if __name__ == "__main__":
    main()
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Danke für eure Hilfe,

ich hatte das gestern schon so in etwa gehabt. Ich denke zumindest, dass es annähernd das gleiche ist, allerdings hovert das nur, also das Bild wechselt schon ohne Klick, wenn man schon mit der Mouse draufzeigt. Deswegen habe ich das wieder geändert. Also soweit ich das als Anfänger beurteilen kann, muss ich wohl nur ein oder zwei Zeilen ändern im meinem Code von gestern aändern, damit es nicht mehr hovert. Ich komme aber nicht darauf, was hier diesen hover erzeigt, weil kein expliziter hover effekt angegeben ist. Zumindest als Begrifflichkeit

Code: Alles auswählen

import tkinter
window = Tk()
window.geometry("80x89")
window.config(bg = '#262626')


status = 50

def btn_ticket_ziehen():
    global status
    status_ticket = status
    status -= 1
    print(status_ticket)

def druecken(d):
    ticket_taste_gedrueckt = tk.PhotoImage(file = 'Bild-2')
    ticket_ziehen['image'] = ticket_taste_gedrueckt
    ticket_ziehen.image = ticket_taste_gedrueckt
    
def loslassen(d):
    ticket_taste_ungedrueckt = tk.PhotoImage(file = 'Bild-1')
    ticket_ziehen['image'] = ticket_taste_ungedrueckt
    ticket_ziehen.image = ticket_taste_ungedrueckt
    
ticket_taste_ungedrueckt = tk.PhotoImage(file = 'Bild-1')
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.pack()

ticket_ziehen.bind('<Enter>', druecken)
ticket_ziehen.bind('<Leave>', loslassen)

window.mainloop()
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

<Enter> und <Leave> sind halt andere Events als <ButtonPress-1> und <ButtonRelease-1>.
Auch für Dich gilt, wie ich schon geschrieben hatte, keine globale Variablen zu verwenden. Fang erst gar nicht damit an, dann hast Du später weniger Probleme.
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Megadanke für deine Antwort. Bzgl. global hatte ich anfangs auch gar nicht gehabt, aber anders rechnet er nicht runter. Mein ursprüngliches Ziel ist es ja mit jedem Klick eins abzuziehen oder zu addieren etc. Wenn ich global aber kommentiere bzw. außer Betrieb setze, so wie du meinst, geht die Funktion nicht mehr

Code: Alles auswählen

status = 50

def btn_ticket_ziehen():
#    global status
    status_ticket = status
    status -= 1
    print(status_ticket)
Dann kommt die Fehlermeldung:
x Local variable 'status' defined in enclosing scope on line 11 referenced before assignment... (pyflakes E)
! Local variable 'status' is assigned to but never uses (pyflakes E). Sonst hätte ich global gar nicht drin. Wie gesagt, anders habe ich es nicht zum Laufen bekommen
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

man kann nicht einfach global rauswerfen. Man muss schon eine Alternative entwicklen. Bei GUIs heißt das üblicherweise in die Objekt Orientierung einzusteigen. Damit kann man Zustand zwischen Ereignisrückrufen festhalten.
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

__deets__ hat geschrieben: Sonntag 6. November 2022, 18:15 man kann nicht einfach global rauswerfen. Man muss schon eine Alternative entwicklen. Bei GUIs heißt das üblicherweise in die Objekt Orientierung einzusteigen. Damit kann man Zustand zwischen Ereignisrückrufen festhalten.
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()
Antworten