256 lines
7.3 KiB
Python
256 lines
7.3 KiB
Python
from ast import If
|
|
import sqlite3
|
|
import time
|
|
import threading
|
|
import tkinter
|
|
from turtle import left, width
|
|
import modules.User as User
|
|
import sys
|
|
import tkinter as tk
|
|
from direct import task
|
|
from tkinter import Scale, StringVar
|
|
from random import random
|
|
|
|
def button_event_close():
|
|
print("Programm wird geschlossen")
|
|
|
|
return 0;
|
|
|
|
def guithread():
|
|
|
|
window_size_x = 1024
|
|
window_size_y = 786
|
|
|
|
label_logged_in = tk.Label
|
|
label_highscore = tk.Label
|
|
label_lastlogin = tk.Label
|
|
|
|
|
|
#Hauptfenster-Block
|
|
window1 = tk.Tk() #Instanzierung von Fensterelement
|
|
window1.wm_title("Snake v1.0")
|
|
window1.geometry("1024x768")
|
|
window1.attributes("-topmost", True)
|
|
|
|
|
|
print("Erstelle User-Klassen Objekt")
|
|
us = User.User()
|
|
|
|
#Mit der Parameterübergabe der Klasseninstantz Tk, kann auch in einer Methode oder Funktion die Instantz direkt manipuliert werden!
|
|
def mainwindow_test(mainwindow : tk.Tk):
|
|
mainwindow.quit()
|
|
pass
|
|
|
|
def close_mainwindow():
|
|
print("Programm wird geschlossen!")
|
|
window1.quit()
|
|
|
|
def read_user(username, schaltf2:tk.Label, label_user_exists:tk.Label, all_listed_radiob:list): #Eingabeprüfung, bei Exception bei leerem String oder Eingabefeld
|
|
unametemp = username #eingabefeld_wert.get()
|
|
if(len(unametemp) != 0):
|
|
print("Lese Nutzereingabe: ", unametemp, "\n")
|
|
if(us.select(unametemp) == True):
|
|
welcome_msg = "Willkommen, " + us.getusername()
|
|
highscore_msg = "Dein letzter Highscore lag bei: " + str(us.gethighscore()) + " Punkten"
|
|
lastlogin_msg = "Du warst das letzte Mal am: " + us.getlastlogin() + " am Spielen"
|
|
label_logged_in = tk.Label(window1, text=welcome_msg)
|
|
label_highscore = tk.Label(window1, text=highscore_msg)
|
|
label_lastlogin = tk.Label(window1, text=lastlogin_msg)
|
|
label_logged_in.place(x=180, y=50)
|
|
label_highscore.place(x=180, y=80)
|
|
label_lastlogin.place(x=180, y=110)
|
|
label_user_exists.destroy()
|
|
schaltf2.destroy()
|
|
|
|
#Zerstört alle gezeichneten Insantzen von Radiobuttons
|
|
for radiobutton in all_listed_radiob:
|
|
radiobutton.destroy()
|
|
return
|
|
else:
|
|
print("Bitte etwas eingeben... Das Feld war leer!")
|
|
return
|
|
|
|
def input_new_user(*events):
|
|
|
|
#Eingabefenster-Block
|
|
subwindow1 = tk.Toplevel(window1)
|
|
subwindow1.wm_title("Eingabe")
|
|
subwindow1.geometry("400x200")
|
|
subwindow1.resizable(0,0) #Blockiert ein Skalieren des Fensters
|
|
window1.attributes("-topmost", False)
|
|
subwindow1.attributes("-topmost", True)
|
|
subwindow1.lift() #Hebt das Child-Fenster zumsammen mit attributes in den Vordergrund
|
|
|
|
|
|
eingabewert = StringVar(subwindow1)
|
|
def check_input():
|
|
if(len(eingabewert.get()) <= 0):
|
|
print("Es wurde keine Eingabe gemacht!")
|
|
else:
|
|
print(eingabewert.get())
|
|
us.createuser(eingabewert.get())
|
|
subwindow1.destroy()
|
|
build_mainwindow(window1)
|
|
return
|
|
|
|
textlabel = tk.Label(subwindow1, text="Bitte gib deinen Benutzernamen ein: ")
|
|
label_new_user = tk.Entry(subwindow1, width=40, textvariable=eingabewert)
|
|
button_ok = tk.Button(subwindow1, text="Erstellen", height=1, width=10, command=check_input)
|
|
button_abort = tk.Button(subwindow1, text="Abbrechen", command=subwindow1.destroy)
|
|
|
|
textlabel.place(x=5, y=5)
|
|
label_new_user.place(x=6, y=25)
|
|
button_ok.place(x=5, y=150)
|
|
button_abort.place(x=140, y=150)
|
|
#label_new_user.place(x=window_size_x*0.25, y=window_size_y*0.6)
|
|
|
|
def build_mainwindow(window1 : tk.Tk):
|
|
#Programmüberschrift
|
|
label1 = tk.Label(window1, text="Snake v1.0 written by CB") #Fenster Funktion für Textausgabe
|
|
label1.grid(row=0, column=0)
|
|
#Schaltflächen und Buttons
|
|
schaltf1 = tk.Button(window1, text="Fenster schließen", command=close_mainwindow)
|
|
schaltf1.place(x=5, y=window_size_y-50)
|
|
|
|
aktuell_ausgewaehlt =""
|
|
|
|
|
|
|
|
if(us.checkuserdb() == False):
|
|
#Anmeldedialog
|
|
print("Noch kein Nutzer angelegt!")
|
|
#messagebox.Message(master=None, message="Es wurde noch kein Spieler angelegt!", type=messagebox.OK, icon=messagebox.WARNING).show()
|
|
input_new_user()
|
|
|
|
elif(us.checkuserdb() == True):
|
|
print("Nutzer bereits vorhanden, wähle einen aus!")
|
|
#us.listallusers()
|
|
|
|
users = us.listallusers()
|
|
ausgewaehlt = tk.StringVar()
|
|
|
|
ausgewaehlt.set(0)
|
|
def value_select():
|
|
aktuell_ausgewaehlt = str(ausgewaehlt.get())
|
|
print(aktuell_ausgewaehlt)
|
|
return 0
|
|
|
|
print (aktuell_ausgewaehlt)
|
|
|
|
all_listed_radiob = list()
|
|
|
|
i = 0
|
|
for einzelwert in users:
|
|
radiob = tk.Radiobutton(window1, text=einzelwert, value=einzelwert, variable=ausgewaehlt, command=value_select)
|
|
all_listed_radiob.append(radiob)
|
|
print (users)
|
|
radiob.place(x=5, y=150+i)
|
|
i+=30
|
|
|
|
print("Alle Radiobuttons gesetzt!")
|
|
|
|
def login_user():
|
|
print("Melde ausgewählten Nutzer an!\n")
|
|
read_user(ausgewaehlt.get(), schaltf2, label_user_exists, all_listed_radiob)
|
|
return 0
|
|
|
|
label_user_exists = tk.Label(window1, text="Wähle deinen Spieler aus: ")
|
|
label_user_exists.place(x=2, y=30)
|
|
#eingabefeld_wert=tk.StringVar()
|
|
|
|
#eingabefeld=tk.Entry(window1, textvariable=eingabefeld_wert)
|
|
#eingabefeld.place(x=2, y=80)
|
|
schaltf2 = tk.Button(window1, text="Auswählen", command=login_user)
|
|
schaltf2.place(x=150, y=75)
|
|
|
|
build_mainwindow(window1)
|
|
|
|
#Nützliches Feature um zeitgesteuerte Events in Mainloop ausführen zu können
|
|
def message():
|
|
print('Keep yourself hyderated.')
|
|
window1.after(2000, message)
|
|
|
|
#window1.after(2000, message)
|
|
window1.mainloop() #Hauptschleife für gezeichnetes Fenster
|
|
us.__del__() #Stellt sicher, dass User-Klassenobjekt im korrekten Thread beendet wird
|
|
return 0;
|
|
|
|
|
|
|
|
class woscht(User.User):
|
|
def __init__(self) -> None:
|
|
UserInstanz = User
|
|
print("Unterklasser der Userklasse erstellt!\n")
|
|
print("So funktioniert die Klassenvererbung in Python...")
|
|
print("Dies ermöglicht eine modulare Aufbauweise ohne sich ständig bei kleineren Abweichung wiederholen zu müssen ober ganze Abschnitte zu kopieren und einzufügen\n")
|
|
|
|
def Testfunkiton(self):
|
|
print("Das ist eine Funktion, welche ausgeführt wird in einer Kindklasse. Sie existiert nicht in der Elternklasse!\n")
|
|
pass
|
|
def Testfunktion2(self):
|
|
print("Weitere Funktion, welche bei initialisieren der Klasse aufgerufen wird.\n")
|
|
pass
|
|
|
|
class woscht2(woscht):
|
|
def __init__(self) -> None:
|
|
woscht().Testfunktion2()
|
|
print("Unterklasse der Woschtklasse\n")
|
|
print("Die stellt eine Vererbung auf eine Vererbung dar. Hier können weitere Ergänzungen vorgenommen werden\n")
|
|
pass
|
|
|
|
#Eine Schleife, welche unter Zuhilfenahme einer Rekursion entsteht.
|
|
def recursive(zahl):
|
|
if(zahl==100):
|
|
print("Vorgang abgeschlossen!")
|
|
return
|
|
elif(zahl <= 100):
|
|
zahl += 1
|
|
time.sleep(0.001)
|
|
print(zahl, end="\r")
|
|
return recursive(zahl)
|
|
else:
|
|
print("Ergeniss konnte nicht erreicht werden!")
|
|
return
|
|
|
|
|
|
def main():
|
|
t = threading.Thread(target=guithread ,args=())
|
|
t.start()
|
|
#recursive(0)
|
|
#while(True):
|
|
# pass
|
|
|
|
"""
|
|
test = woscht()
|
|
test.getusername()
|
|
|
|
test2 = woscht2()
|
|
test2.Testfunkiton()
|
|
|
|
testtu = list()
|
|
|
|
#Mit dieser Funktion können mehrer Instanzen einer KLasse erstellt werden und im späteren Verlauf über den Listenindex bearbeitet werden.
|
|
for i in range(5):
|
|
testtu.append(woscht2())
|
|
|
|
print("Es wurden folgenden Klassen erstellt: ")
|
|
print (len(testtu))
|
|
|
|
|
|
for i in testtu:
|
|
print(i)
|
|
"""
|
|
|
|
|
|
# FH = open("user.txt", "w")
|
|
# FH.write(us.getusername())
|
|
# FH.close()
|
|
time.sleep(1)
|
|
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|
|
|