Re: MAC-Adessen Format Wandler
Verfasst: Dienstag 24. Januar 2017, 15:18
@DerT: in der ersten Zeile der Funktion erzeugst Du einen neuen Frame. Der alte kann also komplett gelöscht werden.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
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.
Code: Alles auswählen
try:
results_frame.destroy()
except NameError:
[...]
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()
Code: Alles auswählen
def format_mac(inputmac, inputcharacter=":"):
return inputcharacter.join(inputmac[i:i+2] for i in range(0,12,2))
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")
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")