
Pythonscript und Installer gibt's natürlich kostenlos auf http://scriptinggamer.de.cg/software.php#gamelimiter
Verbesserungsideen, Bugs und Vorschläge werden gern gesehen, ob in meinem forum http://scriptinggamer.de.cg/forum.php , oder hier...
Prima. Also die eine Frage hat Dav1d ja schon beantwortet, bei den anderen Sachen kannst du dich ja melden wenn du das erste ausgebessert hast.Scriptinggamer hat geschrieben:ich verstehe zwar nicht alles was du geschrieben hast aber werde mal versuchen das etwas zu ordnen und zu verbessern.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: cp1252 -*-
#Module importieren
import tkinter as tk
#Klasse definieren
class App:
#root/master initialisieren
def __init__(self):
self.master = tk.Tk()
self.master.protocol("WM_DELETE_WINDOW", self.quit_app)
self.master.title("Frames")
self.set_main_frame()
self.master.mainloop()
#Hauptfenster starten
def set_main_frame(self):
#Hauptframe definieren
self.main_frame = tk.Frame(self.master)
self.main_frame.pack()
#Widgets initialisieren
self.hallo_label = tk.Label(self.main_frame, text = "Hallo Tkinter!")
self.hallo_button = tk.Button(self.main_frame, text = "Weiter", command = self.set_entry_frame)
self.quit_button = tk.Button(self.main_frame, text = "Beenden", command = self.quit_app)
#Widgets positionieren
self.hallo_label.grid(row = 0, column = 0, columnspan = 2)
self.hallo_button.grid(row = 1, column = 0)
self.quit_button.grid(row = 1, column = 1)
#Bestätigung in der Konsole
print("Hauptfenster geöffnet")
#Einsellungsfenster starten
def set_entry_frame(self):
#Einstellungsframe definieren
self.entry_frame = tk.Frame(self.master)
#Hauptframe schließen
self.main_frame.destroy()
self.entry_frame.pack()
#Widgets initialisieren
self.head_label = tk.Label(self.entry_frame, text = "Eingaben")
self.entry1_label = tk.Label(self.entry_frame, text = "Eingabe 1")
self.entry1_entry = tk.Entry(self.entry_frame)
self.entry2_label = tk.Label(self.entry_frame, text = "Eingabe 2")
self.entry2_entry = tk.Entry(self.entry_frame)
self.safe_entry_button = tk.Button(self.entry_frame, text = "Ausgeben", command = self.set_request_win)
#Widgets positionieren
self.head_label.grid(row = 0, column = 0, columnspan = 2)
self.entry1_label.grid(row = 1, column = 0)
self.entry1_entry.grid(row = 1, column = 1)
self.entry2_label.grid(row = 2, column = 0)
self.entry2_entry.grid(row = 2, column = 1)
self.safe_entry_button.grid(row = 3, column = 0, columnspan = 2)
#Bestätigung in der Konsole
print("Eingabefenster geöffnet")
#Bestätigung oder Abbruch
def set_request_win(self):
#Eingaben auslesen
self.entry = [self.entry1_entry.get(), self.entry2_entry.get()]
#Toplevel Fenster definieren
self.request_win = tk.Toplevel()
self.request_win.title("Wirklich?")
#Widgets initialisieren
self.question_label = tk.Label(self.request_win, text = "Möchtest du den Text wirklich ausgeben?")
self.agree_button = tk.Button(self.request_win, text = "Also los, gib ihn aus!", command = self.print_entry)
self.main_button = tk.Button(self.request_win, text = "Ich überlegs mir...", command = self.to_main)
self.quit_button = tk.Button(self.request_win, text = "Sofort alles beenden!", command = self.quit_app)
#Widgets positionieren
self.question_label.grid(row = 0)
self.agree_button.grid(row = 1, sticky = "w,e")
self.main_button.grid(row = 2, sticky = "w,e")
self.quit_button.grid(row = 3, sticky = "w,e")
#Eingaben verwerten und zum Hauptfenster zurückkehren
def print_entry(self):
###Eingaben verwerten#########
for setting in self.entry: #
print(setting) #
##############################
#Nachfragefenster schließen
self.request_win.destroy()
#Ausgabeframe schließen
self.entry_frame.destroy()
#Hauptframe starten
self.set_main_frame()
def to_main(self):
self.request_win.destroy()
self.entry_frame.destroy()
self.set_main_frame()
def quit_app(self):
print("Programm beendet")
self.master.destroy()
#App ausführen (Instanz der Klasse App erstellen)
app = App()
Code: Alles auswählen
def main():
app = App()
if __name__ == '__main__':
main()
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Module importieren
import tkinter as tk
from tkinter import messagebox
import time
import pickle
import winsound
import subprocess
#Klasse definieren
class App:
#Hauptfenster initialisieren
def __init__(self, master):
self.master = master
self.master.title("Gamelimiter")
self.add_widgets()
#Widgets hinzufügen
def add_widgets(self):
self.radio_check = tk.IntVar()
self.block_check = tk.IntVar()
self.radio_check.set(1)
self.block_check.set(0)
#Widgets initialisieren
head_label = tk.Label(self.master, text = "Herzlich willkommen!\nWie lange möchtest du spielen?")
self.time_entry_h = tk.Entry(self.master, width = 4)
seperator_label = tk.Label(self.master, text = ":")
self.time_entry_m = tk.Entry(self.master, width = 4)
time_radio_1 = tk.Radiobutton(self.master, text = "Zeit herunterzählen", variable = self.radio_check, value = 1)
time_radio_2 = tk.Radiobutton(self.master, text = "als Uhrzeit verwenden", variable = self.radio_check, value = 2)
start_button = tk.Button(self.master, text = "Starten", command = self.countdown)
edit_processes_button = tk.Button(self.master, text = "Prozesse verwalten", command = self.edit_processes)
block_check_button = tk.Checkbutton(self.master, text = "dann eine Stunde blocken", variable = self.block_check)
self.time_entry_h.insert(10, "h")
self.time_entry_m.insert(10, "m")
#Widgets positionieren
head_label.grid(row = 0, column = 0, columnspan = 3)
self.time_entry_h.grid(row = 1, column = 0, sticky = "e")
seperator_label.grid(row = 1, column = 1)
self.time_entry_m.grid(row = 1, column = 2, sticky = "w")
time_radio_1.grid(row = 2, column = 0)
time_radio_2.grid(row = 2, column = 2)
start_button.grid(row = 3, column = 0, columnspan = 3, sticky = "w,e")
edit_processes_button.grid(row = 4, column = 2, sticky = "e")
block_check_button.grid(row = 4, column = 0, columnspan = 3, sticky = "w")
#Zeit einlesen, verarbeiten und herunterzählen
def countdown(self):
#Zeit zum herunterzählen
if self.radio_check.get() == 1:
if self.time_entry_h.get().isdigit() and 0 <= int(self.time_entry_h.get()) <= 60:
play_time = int(self.time_entry_h.get()) * 3600
else:
play_time = 0
if self.time_entry_m.get().isdigit() and 0 <= int(self.time_entry_m.get()) <= 60:
play_time += int(self.time_entry_m.get()) * 60
#Zeit bis zur Uhrzeit
else:
if self.time_entry_h.get().isdigit() and 0 <= int(self.time_entry_h.get()) <= 60:
time_end_m = int(self.time_entry_h.get()) * 60
hour_isset = True
else:
time_end_m = int(time.strftime("%H")) * 60
hour_isset = False
if self.time_entry_m.get().isdigit() and 0 <= int(self.time_entry_m.get()) <= 60:
time_end_m += int(self.time_entry_m.get())
elif not hour_isset:
time_end_m += int(time.strftime("%M"))
time_now_m = int(time.strftime("%H")) * 60 + int(time.strftime("%M"))
if time_now_m <= time_end_m:
play_time = (time_end_m - time_now_m)*60
else:
play_time = (time_end_m - time_now_m + 1440)*60
#Zählen starten
self.master.destroy()
if play_time != 0:
if play_time <= 300:
time.sleep(play_time -11)
else:
time.sleep(play_time - 300)
os.startfile("warnung.exe")
time.sleep(289)
winsound.PlaySound("beep.wav", winsound.SND_FILENAME)
self.kill_tasks()
#Prozesse überprüfen und beenden
def kill_tasks(self):
#Überprüfen des Befehls
def system_test():
if subprocess.call(["taskkill", "/IM", "testprozessname"], shell = True) == 128:
return("taskkill")
else:
return("tskill")
#Prozesse aus Datei einlesen
file_processes = open("prozesse.data", "rb")
processes = pickle.load(file_processes)
file_processes.close()
#Rückmeldung vorbereiten
processes_closed = []
processes_failed = []
processes_opened = str(subprocess.check_output("tasklist", shell = True), encoding='utf8')
#Prozesse versuchen zu beenden
self.befehl = system_test()
for process in processes:
if process in processes_opened:
if subprocess.call([self.befehl, "/F", "/IM", process, "/T"], shell = True) != 1:
processes_closed.append(process)
else:
processes_failed.append(process)
#Root erstellen
endroot = tk.Tk()
endroot.title("Beenden")
head_label = tk.Label(text = "Das Programm ist fertig!")
end_button = tk.Button(text = "Beenden", command = endroot.destroy)
head_label.grid(row = 0)
end_button.grid(row = 1, sticky = "w,e")
#Rückmeldung geben
if len(processes) == 0:
messagebox.showwarning(title = "Keine Prozesse", message = "Du hast noch keine Prozesse gespeichert!")
elif len(processes_closed) > 0 and len(processes_failed) == 0:
messagebox.showwarning(title = "Prozesse beendet",
message = "Folgende Prozesse wurden beendet:\n" + ", ".join(processes_closed))
elif len(processes_closed) > 0:
messagebox.showwarning(title = "Prozesse beendet",
message = "Folgende Prozesse wurden beendet:\n" + ", ".join(processes_closed) + "\nFolgende Prozesse konnten nicht Beendet werden:\n" + ", ".join(processes_failed))
elif len(processes_failed) > 0:
messagebox.showwarning(title = "Beenden fehlgeschlagen",
message = "Für folgende Prozesse reichen die Rechte nicht aus:\n(Dies lässt sich beheben indem das Programm\nals Administrator ausgeführt wird)\n" + ", ".join(processes_failed))
else:
messagebox.showwarning(title = "Keinen Prozess beendet",
message = "Keiner der gespeicherten Prozesse ist geöffnet!")
#Mainloop starten
endroot.mainloop()
if self.block_check.get() and len(processes) != 0:
self.block()
def edit_processes(self):
#Prozesse separieren, despacen und in die Datei schreiben
def safe_processes():
raw_text = str(process_entry.get())
process_list = []
if not raw_text == "":
while True:
if not raw_text == "":
if "," in raw_text:
process = raw_text[:raw_text.find(",")]
raw_text = raw_text[raw_text.find(",")+1:]
else:
process = raw_text
raw_text = ""
while True:
if " " in process:
process = process[:process.find(" ")] + process[process.find(" ")+1:]
else:
break
process_list.append(process)
else:
break
process_file = open("prozesse.data", "wb")
pickle.dump(process_list, process_file)
process_file.close()
messagebox.showwarning(title = "Speichern erfolgreich!", message = "Erfolgreich gespeichert!")
edit_toplevel.destroy()
#Tasks-einlesen-Dialog
def get_tasks():
#Tasks vergleichen und ausgeben
def compare_tasks():
#global tasks_before
tasks_after = str(subprocess.check_output("tasklist", shell = True), encoding='utf8').splitlines()[4:]
added_tasks = []
for task_a in tasks_after:
in_list = False
for task_b in tasks_before:
if task_a[:task_a.find(" ")] == task_b[:task_b.find(" ")]:
in_list = True
if not in_list:
added_tasks.append(task_a[:task_a.find(" ")])
print(added_tasks)
if len(added_tasks) > 0:
messagebox.showwarning(title = "Tasks", message = "Folgende Tasks sind hinzugekommen:\n" + "\n".join(added_tasks))
else:
messagebox.showwarning(title = "Tasks", message = "Es sind keine Tasks hinzugekommen!")
get_tasks_toplevel.destroy()
#Offene Prozesse einlesen
tasks_before = str(subprocess.check_output("tasklist", shell = True), encoding='utf8').splitlines()[4:]
#Toplevel initialisieren
get_tasks_toplevel = tk.Toplevel()
get_tasks_toplevel.title("Tasks einlesen")
#Widgets initialisieren
head_label = tk.Label(get_tasks_toplevel, text = "Starte das Spiel und drücke den Button!")
get_tasks_button = tk.Button(get_tasks_toplevel, text = "Überprüfen", command = compare_tasks)
head_label.grid(row = 0)
get_tasks_button.grid(row = 1, sticky = "w,e")
#Prozesse importieren
process_file = open("prozesse.data")
if process_file.read() == "":
text = ""
else:
process_file = open("prozesse.data", "rb")
text = ", ".join(pickle.load(process_file))
process_file.close()
#Toplevel initialisieren
edit_toplevel = tk.Toplevel()
edit_toplevel.title("Prozesse verwalten")
#Widgets initialisieren
head_label = tk.Label(edit_toplevel, text = "Gib hier die Prozesse deiner Spiele ein:")
process_entry = tk.Entry(edit_toplevel)
safe_button = tk.Button(edit_toplevel, text = "Speichern", command = safe_processes)
break_button = tk.Button(edit_toplevel, text = "Abbrechen", command = edit_toplevel.destroy)
get_button = tk.Button(edit_toplevel, text = "Tasks einlesen", command = get_tasks)
process_entry.insert(10, text)
#Widgets positionieren
head_label.grid(row = 0, column = 0, columnspan = 3)
process_entry.grid(row = 1, column = 0, columnspan = 3, sticky = "w,e")
safe_button.grid(row = 2, column = 0)
break_button.grid(row = 2, column = 1)
get_button.grid(row = 2, column = 2)
def block(self):
#Prozesse aus Datei importieren
file_processes = open("prozesse.data", "rb")
processes = pickle.load(file_processes)
file_processes.close()
#1 Stunde lang jede minute prüfen
i = 60
while i > 0:
i -= 1
time.sleep(60)
processes_opened = str(subprocess.check_output("tasklist", shell = True), encoding='utf8')
for process in processes:
if process in processes_opened:
subprocess.call([self.befehl, "/F", "/IM", process, "/T"], shell = True)
def main():
root = tk.Tk()
app = App(root)
root.mainloop()
if __name__ == "__main__":
main()
Natürlich kann man cp1252 verwenden, aber gibt es einen konkreten Grund warum du nicht einfach das zukunftssichere UTF-8 nimmst?Scriptinggamer hat geschrieben:Code: Alles auswählen
#!/usr/bin/python # -*- coding: cp1252 -*-
Nein, stopp. Erst nachdenken.Scriptinggamer hat geschrieben:habs mit irgendwo rauskopiertich ändere es eben.
Du musst wissen wie die Datei kodiert ist, sonst ist jedes Cookie Kaese, das hat mit den _Python_ Defaults nichts zu tun, sondern einzig mit dem Editor den du verwendest.Scriptinggamer hat geschrieben:Nachdenken hätte nichts gebracht, ich wusste garnicht was für ein Coding standart ist.