Ich hatte mal vor ~1 Woche ein Thread zu einem anderen Thema eröffnet, in dem mir geraten wurde, das Ganze in OOP zu schreiben.
In meinem Buch, auf Internetseiten und YouTube Videos habe ich bereits so einiges gelesen / gehört, aber nie wurde was beschrieben, wie man das bei GUIs macht.
Ich habe mein Code versucht in einer Klasse mit Methoden zu schreiben:
Code: Alles auswählen
########### Eigene CronusMax GamePack GUI (Graphical User Interface) ###########
# Importierung:
import tkinter, webbrowser
from tkinter import messagebox
class ScriptGameInterface:
def __init__(self):
# Hauptfenster:
self.mainwindow = tkinter.Tk()
self.mainwindow.title("xXSkyWalkerXx1 - Fortnite S.G.I. Tool")
self.mainwindow.resizable(0,0)
self.mainwindow.geometry("1200x540") #(x - Y)
self.mainwindow.mainloop()
# Menüleiste:
self.menuLeiste = tkinter.Menu(self.mainwindow)
self.infoLeiste = tkinter.Menu(self.menuLeiste,tearoff=0)
self.donateLeiste = tkinter.Menu(self.menuLeiste,tearoff=0)
self.exitLeiste = tkinter.Menu(self.menuLeiste,tearoff=0)
self.updateLeiste = tkinter.Menu(self.menuLeiste,tearoff=0)
self.shopLeiste = tkinter.Menu(self.menuLeiste,tearoff=0)
self.infoLeiste.add_command(label = "AGBs", command = showAGB)
self.infoLeiste.add_command(label = "Credits", command = showAuthor)
self.exitLeiste.add_command(label = "Beenden", foreground = "red",command = Beenden) #Ändert Schriftfarbe zu Rot (Hintergrund wäre "background")
self.donateLeiste.add_command(label = "Donate", command = openDonateLink)
self.shopLeiste.add_command(label = "Online Shop", foreground = "green",command = openShopLink)
self.menuLeiste.add_cascade(label="Infos", menu= infoLeiste)
self.menuLeiste.add_cascade(label="Update[comming soon!]", menu= updateLeiste)
self.menuLeiste.add_cascade(label="Donate", menu= donateLeiste)
self.menuLeiste.add_cascade(label="More Scripts", menu= shopLeiste)
self.menuLeiste.add_cascade(label="Beenden", menu= exitLeiste)
self.mainwindow["menu"] = menuLeiste
# Frames:
self.frameLeft = tkinter.Frame(self.mainwindow,width=200,height=300,relief="sunken",bd=0)#300 , 540
self.frameLeft.pack(side="left",expand=1)
self.frameRight = tkinter.Frame(self.mainwindow, width=500,height=400,relief="sunken",bd=0)#900 , 540
self.frameRight.pack(side="right",expand=1)
# Widgets vom/für linken Frame:
self.generateButton = tkinter.Button(self.frameLeft, text= ">>>GENERATE BUTTON<<<", command = generate)
self.infoLabel1 = tkinter.Label(self.frameLeft, text = "Layout Settings:", font = "arial 27 bold", foreground = "orange") #Gibt Text in Arial, Größe 25 und Art fettgedruckt aus
self.layoutButton = tkinter.Button(self.frameLeft, text = "Layout Settings", command = layoutSettings)
self.infoLabel2 = tkinter.Label(self.frameLeft, text = "Mods:", font = "arial 27 bold", foreground = "orange") #Gibt Text in Arial, Größe 25 und Art fettgedruckt aus
self.aimbotButton = tkinter.Button(self.frameLeft, text = "Aimbot", command = aimbotSettings)
self.aimassistButton = tkinter.Button(self.frameLeft, text = "AimAssist", command = aimassistSettings)
self.norecoilButton = tkinter.Button(self.frameLeft, text = "NoRecoil", command = norecoilSettings)
self.rapidfireButton = tkinter.Button(self.frameLeft, text = "RapidFire", command = rapidfireSettings)
self.jitterButton = tkinter.Button(self.frameLeft, text = "Double Tac & Pump", command = jitterSettings)
self.autorunButton = tkinter.Button(self.frameLeft, text = "AutoRun", command = autorunSettings)
# Widgets vom/für rechten Frame:
self.titleLabel = tkinter.Label(self.frameRight,foreground = "red", font = "arial 33 bold")
self.previewLabel = tkinter.Label(self.frameRight, text = "PLACEHOLDER FOR PICTURE/VIDEO!")
self.info1Label = tkinter.Label(self.frameRight, text = "Information/en:",foreground = "red",font = "arial 18 bold")
self.info2Label = tkinter.Label(self.frameRight,text = "<Noch keine Informationen enthalten!>",font = "arial 10")
self.setting1Label = tkinter.Label(self.frameRight, text = "Einstellungen:",foreground = "red",font = "arial 18 bold")
self.setting2Label = tkinter.Label(self.frameRight, text = "Schaltung:",font = "arial 10")
self.setting3Label = tkinter.Label(self.frameRight,font = "arial 10")
self.setting4Label = tkinter.Label(self.frameRight,font = "arial 10")
self.setting5Label = tkinter.Label(self.frameRight,font = "arial 10")
self.toggle = tkinter.StringVar()
self.toggle.set("FALSE")
self.on = tkinter.Radiobutton(self.frameRight, text = " ON",variable=toggle,value="TRUE")
self.off = tkinter.Radiobutton(self.frameRight, text = "OFF",value="FALSE")
self.entry1 = tkinter.Entry(self.frameRight)
self.entry2 = tkinter.Entry(self.frameRight)
self.entry3 = tkinter.Entry(self.frameRight)
#Widgets platzieren:
self. generateButton.pack(pady=12)
self.infoLabel1.pack(pady=12)
self.layoutButton.pack(pady=8)
self.infoLabel2.pack(pady=12)
self.aimbotButton.pack(pady=8)
self.aimassistButton.pack(pady=8)
self.norecoilButton.pack(pady=8)
self.rapidfireButton.pack(pady=8)
self.jitterButton.pack(pady=8)
self.autorunButton.pack(pady=8)
def Beenden(self):
self.mainwindow.destroy()
def check_updates(self):
pass
def openDonateLink(self):
try:
self.webbrowser.open("https://www.paypal.me/xXSkyWalkerXx1")
except:
self.error = tkinter.messagebox.showerror("Fehler","Verbindung konnte nicht aufgebaut werden!")
def openShopLink(self):
try:
self.webbrowser.open("https://selly.gg/@xXSkyWalkerXx1")
except:
self.error = tkinter.messagebox.showerror("Fehler","Verbindung konnte nicht aufgebaut werden!")
def showAGB(self):
self.infoText = tkinter.messagebox.showinfo("AGBs","\
*****************************************\n\
Hier werden später die AGBs stehen! \n\
*****************************************") #41 "*" für eine ganze Zeile
def showAuthor(self):
self.infoText = tkinter.messagebox.showinfo("Credits","\
*****************************************\n\
Credits: xXSkyWalkerXx1\n\
Thanks to: __deets__\
*****************************************")
def generate(self): # generiert Skript
pass
def layoutSettings(self):
pass
def aimbotSettings(self):
pass
def aimassistSettings(self):
pass
def norecoilSettings(self):
pass
def jitterSettings(self):
pass
def autorunSettings(self):
pass
def rapidfireSettings(self): # (self,shootrate = "4") - set shootrate default to 4!
pass
Interface = ScriptGameInterface()
Interface.__init__()
Nach Beendigung erhalte ich diesen Fehler in der Shell:
Code: Alles auswählen
Traceback (most recent call last):
File "/home/pi/Schreibtisch/CronusMax_SGI.py", line 142, in <module>
Interface = ScriptGameInterface()
File "/home/pi/Schreibtisch/CronusMax_SGI.py", line 18, in __init__
self.menuLeiste = tkinter.Menu(self.mainwindow)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2720, in __init__
Widget.__init__(self, master, 'menu', cnf, kw)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2151, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: can't invoke "menu" command: application has been destroyed
Mit freundlichen Grüßen,
xXSkyWalkerXx1