MAC-Adessen Format Wandler
Hallo,
Dieses Problem könnte/konnte ich lösen mit einem.Aber ich möchte ebenfalls einen Clear Burron einbauen. Welchen command muss ich diesem geben?
Anbei mal mein "neues" Programm. (Ohne "frame.destroy()" ) Ich habe versucht alle Tipps zu berückstichtigen.
Ja aber wenn ich den Frame mit destroy() zerstöre bekomme ich beim ersten durchlauf einen "NameError:" da der Frame ja noch nicht definiert ist.Sirius3 hat geschrieben:@DerT: in der ersten Zeile der Funktion erzeugst Du einen neuen Frame. Der alte kann also komplett gelöscht werden.
Dieses Problem könnte/konnte ich lösen mit einem.
Code: Alles auswählen
try:
results_frame.destroy()
except NameError:
[...]
Anbei mal mein "neues" Programm. (Ohne "frame.destroy()" ) Ich habe versucht alle Tipps zu berückstichtigen.
Code: Alles auswählen
import os
import tkinter as tk
from string import hexdigits
def cleanmac(inputmac):
cleanmac=inputmac.upper()
clean=[":", " ", "-"]
for i in clean:
cleanmac=cleanmac.replace(i, "")
return cleanmac
def check_mac_length(inputmac):
return len(inputmac) == 12
def check_allowed_characters(inputmac):
return all(digit in hexdigits for digit in inputmac)
def format_mac(inputmac, inputcharacter):
formatmac=""
for i in range(0,12,2):
formatmac += inputmac[i:i+2] + inputcharacter
formatmac=formatmac[:-1]
return formatmac
def add_to_clipboard(text, parent):
parent.clipboard_clear()
return parent.clipboard_append(text)
def getclipboard(parent):
getclip = ""
getclip = parent.clipboard_get()
if len(getclip) < 20:
return getclip
else:
return ""
def check_and_format_mac(inputmac, parent):
results_frame = tk.Frame(parent, width=430, height=90)
errors = []
mac = []
delimeter = [":", "-"]
clean = cleanmac(inputmac)
from_above = 10
if not check_mac_length(clean):
errors.append("Zeichenanzahl ungültig")
if not check_allowed_characters(clean):
errors.append("Ungültiges Zeichen")
if errors:
errors.insert(0, "Eingabe Prüfen")
for line in errors:
tk.Label(results_frame, font= "Verdana 10 bold", text=line, justify=tk.CENTER, width=20).place(x=120, y=from_above, width=170, height=20)
from_above += 20
else:
print(inputmac)
mac.append(clean)
for i in delimeter:
mac.append(format_mac(clean, i))
for row, line in enumerate(mac):
tk.Label(results_frame, font= "Verdana 10 ", text=line, justify=tk.CENTER).place(x=120, y=from_above, width=170, height=20)
from_above += 25
tk.Button(results_frame, font= "Verdana 10 ", text="copy", command=lambda: add_to_clipboard(mac[0], parent), width=10).place(x=320, y=10, width=100, height=20)
tk.Button(results_frame, font= "Verdana 10 ", text="copy", command=lambda: add_to_clipboard(mac[1], parent), width=10).place(x=320, y=35, width=100, height=20)
tk.Button(results_frame, font= "Verdana 10 ", text="copy", command=lambda: add_to_clipboard(mac[2], parent), width=10).place(x=320, y=60, width=100, height=20)
#for row, line in enumerate(mac):
#tk.Button(results_frame, text="copy", command=lambda: add_to_clipboard(str(line), parent)).place(x=120, y=from_above, width=170, height=20)
#from_above += 25
return results_frame
def main():
master = tk.Tk()
master.title = "MAC Zauberer"
master.resizable(width=0, height=0)
master.bind("<Return>",lambda eff:check_and_format_mac(eingabefeld.get(), master).grid(row=1, column=0))
entry_frame = tk.Frame(master, width=430, height=70)
entry_frame.grid(row=0)
eingabe_label = tk.Label(entry_frame, font= "Verdana 10 bold", text="Eingabe:")
eingabe_label.place(x=30, y=40, width=60, height=20)
eingabefeld = tk.Entry(entry_frame, justify=tk.CENTER, font= "Verdana 10 ")
eingabefeld.place(x=120, y=40, width=170, height=20)
eingabefeld.insert(0,getclipboard(master))
clear_button = tk.Button(entry_frame, font= "Verdana 10 ", text= "Clear",)
clear_button.place(x=320, y=10, width=100, height=20)
start_button = tk.Button(entry_frame, font= "Verdana 10 ", width=10, text= "Start", command= lambda: check_and_format_mac(eingabefeld.get(), master).grid(row=1, column=0))
start_button.place(x=320, y=40, width=100, height=20)
if __name__ == "__main__": main()
@DerT: `NameError` sollte man nicht behandeln. Das ist ein Programmierfehler der zur Laufzeit gar nicht auftreten sollte. Falls er Auftritt sollte man das Programm so ändern das er nicht auftreten kann.
@DerT: "format_mac" könnte man mit .join schreiben
Der Rückgabewert von add_to_clipboard ist wenig sinnvoll. getclip wird unnötigerweise an eine leere Zeichenkette gebunden. mac und delimiter werden definiert, lange bevor sie verwendet werden. place sollte man nicht verwenden. Die Copy-Buttons kann man innerhalb der Schleife erzeugen, wenn man partial statt lambda verwendet.
Solange kein results_frame existiert weist man ihm den Wert None zu, so dass eine einfache Abfrage "result_frame is not None" statt des NameErrors ausreicht. Dann brauchst Du aber eine Klasse, um diesen Wert irgendwo speichern zu können.
Code: Alles auswählen
def format_mac(inputmac, inputcharacter=":"):
return inputcharacter.join(inputmac[i:i+2] for i in range(0,12,2))
Solange kein results_frame existiert weist man ihm den Wert None zu, so dass eine einfache Abfrage "result_frame is not None" statt des NameErrors ausreicht. Dann brauchst Du aber eine Klasse, um diesen Wert irgendwo speichern zu können.
Hallo,
versuche mich gerade daran eine Klasse zu erstellen.
Keine Ahnung ob es so überhaupt Sinn macht.
Ich wollte eine Klasse "gui" erstellen die z.B. die methoden "create_frame" und "destroy_frame" hat.
Funktioniert auch soweit. Nur "destroy_frame" zerstört den Frame nicht.
Nerv ich euch langsam?
Gruß
T
versuche mich gerade daran eine Klasse zu erstellen.
Keine Ahnung ob es so überhaupt Sinn macht.
Ich wollte eine Klasse "gui" erstellen die z.B. die methoden "create_frame" und "destroy_frame" hat.
Funktioniert auch soweit. Nur "destroy_frame" zerstört den Frame nicht.
Code: Alles auswählen
class gui:
def __init__ (self, master):
self.master = master
master.title("Das ist ein GUI")
def create_frame(self):
self.frame = tk.Frame(self.master)
self.label = tk.Label(self.master, text="Hallo aus create_frame")
self.frame.pack()
self.label.pack()
def destroy_frame(self):
self.frame.destroy()
print("destroy_frame")
Gruß
T
Ich nehme alles zurück
Tut mir leid hab meinen Fehler gesehen und korrigiert.
Macht eine klasse "gui" sinn?
Tut mir leid hab meinen Fehler gesehen und korrigiert.
Sirius3 hat geschrieben:@DerT: woran merkst Du, dass der Frame nicht entfernt wird? Bei 0 Pixel großen Frames kann man sowas leicht mal übersehen.
Code: Alles auswählen
class gui:
def __init__ (self, master):
self.master = master
master.title("Das ist ein GUI")
def create_frame(self):
self.frame = tk.Frame(self.master)
self.label = tk.Label(self.frame, text="Hallo aus create_frame")
self.frame.pack()
self.label.pack()
def destroy_frame(self):
self.frame.destroy()
print("destroy_frame")
Macht eine klasse "gui" sinn?