Kurz zur allgemeinen Situation
Ich arbeite als Informatiker im Bereich der Netzwerktechnik, nun habe ich, und bestimmt auch andere, das Problem dass die meisten Programme eine MAC-Adresse nicht mit jedem Trennzeichen akzeptieren.
Zum Beispiel akzeptiert der DHCP sie nur ohne Trennzeichen und andere Programme nur mit ":" als Trennzeichen.
Nun wollte ich ein Programm welches mir die Trennzeichen entfernt bzw. hinzufügt.
Nachdem ich im Internet nichts Brauchbares gefunden habe, habe ich mich also selbst einmal darüber gemacht ein solches "Programm" zu schreiben.
Mein einziges Problem war, ich kann nicht Programmieren .
Also habe ich mich durch das Internet und sonstige Tutorials für Python gekämpft bis ich es geschafft habe das mein erstes Python Programm funktioniert und das tut was es soll.
Der Name "Format Wandler" ist zwar nicht ganz korrekt, da hier nur die Trennzeichen geändert werden aber mir ist nichts Treffenderes eingefallen.
Das "Programm" funktioniert wie folgt.
- Beim Starten erscheint ein Fenster in dem Man eine MAC-Adresse eingeben kann. Die Eingabe kann ohne Trennzeichen und mit ":" oder "-" als Trennzeichen erfolgen.
- Mit "Enter" oder einem Klick auf den Button "Show" wird dann die MAC in drei möglichen Varianten angezeigt
- Mac ohne Trennzeichen
- Mac mit Doppelpunkt als Trennzeichen
- Mac mit Bindestrich als Trennzeichen
So nun habe ich ein Programm welches seinen Zweck erfüllt und habe gelernt mit Python zu Programmieren.
Ich weiß aber nicht ob es gut oder schlecht Programmiert ist, ob ich zu viel sinnlosen Code eingebaut habe.
Da habe ich mir gedacht ich poste mein "Programm" einmal hier und lasse es von euch auseinandernehmen.
Ich möchte hier kein komplett überarbeitetes Programm von euch haben. Sondern lediglich konstruktive Kritik an meinem Programm.
Außerdem habe ich ein paar Fragen.
- In meinem Code nutze ich den Befehl Diesen Code habe ich durch goggeln gefunden. Niemand hat ihn aber erklärt bzw. habe ich nichts gefunden. Eigentlich ist er ja auch selbsterklären. Ich weiß nur nicht was die "10" bewirkt.
Code: Alles auswählen
e1.insert(10,getclip)
- Ich nutze TK Labels mit .Grid() nun würde ich gerne die Hinterlegte Farbe des Labels auf der ganzen breite anzeigen. Geht das?
- Ich kopiere mir die Zwischenablage von Windows mit
Wenn die Zwischenablage leer ist kommt ein Fehler und das Programm startet nicht.
Code: Alles auswählen
getclip = master.clipboard_get()
Wie kann ich das verhindern?
Vielen Dank an alle die sich überhaupt die Mühe machen sich das Programm anzuschauen
Gruß
T
Code: Alles auswählen
from tkinter import *
import os
def fcleanmac(finput): #Funktion um dem String der die MAC enthält einheitlich zu machen (ohne Trennzeichen und Uppercase) finput=Eingegebene MAC
global cleanmac #Globale Variable für die MAC-Adresse ohne Trennzeichen
finput=finput.upper() #finput als uppcercase
cleanmac=finput.replace(":", "") #Entfernen aller : aus finput
cleanmac=cleanmac.replace("-", "") #Entfernen aller - aus finput
def fcheckmaclen(): #Funktion um die länge der eingegebenen MAC zu Prüfen und einen Fehler auszugeben
global cleanmac #Globale Variable für die MAC-Adresse ohne Trennzeichen
global chklen #Globale Variable für den Prüfwert der Längenprüfung - True=Länge der MAC "OK"
global master #Globale Variable für das tk.root element
if len(cleanmac) == 12: #If Abfrage zu Prüfung der länge
chklen=True #Wenn länge "OK" setze den Prüfwert auf True
else: #Wenn die Länge nicht korrekt ist
chklen=False #wird der Prüfwert auf False gesetzt
def fcheckallowcharmac(): #Funktion um die MAC auf falsche Zeichen zu prüfen - True=Keine ungültigen Zeichen enthalten
global chkallwchar #Globale Variable für den Prüfwert der Zeichenprüfung
chkallwchar=True #Prüfwert der Zeichenprüfung
allwdchr=("1","2","3","4","5","6","7","8","9","0","A","B","C","D","E","F") #Liste der Erlaubten Zeichen
i=0 #Schleifenzähler
while i < len(cleanmac): #While Schleife zur Abfrage der erlbauten Zeichen
if cleanmac[i] in allwdchr: #Abfrage der Erlaubten Zeichen
i += 1 #Zähler der Schleife um 1 erhöhen um das näcshte Zeichen abzufragen
else: #Wenn ein ungültiges Zeichen enthalten ist wird der
chkallwchar=False #Prüfwert auf False gesetzt
break #Verlassen der Schleife
def fformatmaccolon(): #funktion um die Doppelpunkte zur "Cleanmac" hinzuzufügen
global cleanmac #Globale Variable für die MAC-Adresse ohne Trennzeichen
global colonmac #Globale Variable für die MAC-Adresse mit Doppelpunkt als Trennzeichen
colonmac="" #Setzen der Variablen da sonst in der Schleife ein Fehler kommt
i=0 #Schleifenzähler
for i in range(0,12,2): #For Schleife zum Einsetzen der Doppelpunkte
colonmac += cleanmac[i:i+2] + ":" #Einsetzen der Doppelpunkte
colonmac=colonmac[:-1] #Entfernen des letzten Zeichens da dieses ein Doppelpunkt ist
def fformatmacdash(): #funktion um die Bindestriche zur "Cleanmac" hinzuzufügen
global cleanmac #Globale Variable für die MAC-Adresse ohne Trennzeichen
global dashmac #Globale Variable für die MAC-Adresse mit Bindestrich als Trennzeichen
dashmac="" #Setzen der Variablen da sonst in der Schleife ein Fehler kommt
i=0 #Schleifenzähler
for i in range(0,12,2): #For Schleife zum Einsetzen der Doppelpunkte
dashmac += cleanmac[i:i+2] + "-" #Einsetzen der Doppelpunkte
dashmac=dashmac[:-1] #Entfernen des letzten Zeichens da dieses ein Minus ist
def addToClipBoard(text): #Funktion um einen Wert in die Zwischenablage zu kopieren
global master #Globale Variable master
master.clipboard_clear() #Leeren der Zwischenablage
master.clipboard_append(text) #Variable text in Zwischenablage kopieren
def fclear(): #Funktion um das Fenster auf Stadnard zu setzen
lblank.grid_remove() #Entfernen aller Labels damit sie beim umwandeln einer neuen MAC entfernt sind
l1.grid_remove()
l2.grid_remove()
l3.grid_remove()
l4.grid_remove()
l5.grid_remove()
l6.grid_remove()
l7.grid_remove()
l8.grid_remove()
l9.grid_remove()
ctc1.grid_remove()
ctc2.grid_remove()
ctc3.grid_remove()
e1.delete(0,END)
def fcheckmac(checkinput):
global chkmac
global cleanmac #Globale Variable für die MAC-Adresse ohne Trennzeichen
global dashmac #Globale Variable für die MAC-Adresse mit Bindestrich als Trennzeichen
global colonmac #Globale Variable für die MAC-Adresse mit Doppelpunkt als Trennzeichen
global l1 #Globale Variable tk.label Text="Clean : "
global l2 #Globale Variabel tk.label Text="Dash : "
global l3 #Globale Variabel tk.label Text="Colon : "
global l4 #Globale Variabel tk.label Text=cleanmac
global l5 #Globale Variabel tk.label Text=dashmac
global l6 #Globale Variabel tk.label Text=colonmac
fclear()
e1.insert(10, checkinput)
fcleanmac(checkinput) #Ausführen der Funktion fcleanmac - übergabe der variablen checkinput == Wert aus Eingabefeld
fcheckallowcharmac() #Ausführen der Funktion fcheckallowcharmac und die gültigen Zeichen der MAC zu prüfen
fcheckmaclen() #Ausführen der Funktion fcheckmaclen um die Länge der Eingabe zu prüfen
lblank.grid(row=1, column=0, columnspan=3) #Einfügen einer leerzeile
if chklen == False or chkallwchar == False: #Wenn einer der beiden Prüfungen FALSE ergibt
l9.grid(row=2, column=0, columnspan=4) #wird die Meldung "Eingabe prüfen" angezeigt
if chklen == False: #Wenn die länge ungültig ist
l8.grid(row=3, column=0, columnspan=4) #wird die Fehlermeldung "Zeichenanzahl ungültig" und
if chkallwchar == False: #Wenn ungültige Zeichen enthalten sind
l7.grid(row=4, column=0, columnspan=4) #wir die Fehlermeldung "Ungültiges Zeichen" und
if chklen and chkallwchar == True: #Wenn beide Prüfungen TRUE ergeben
fformatmaccolon() #Funktion fformatmaccolon ausführen um die MAC mit Doppelpunkt als Trennzeichen zu erhalten
fformatmacdash() #Funktion fformatmaccolon ausführen um die MAC mit Bindestrich als Trennzeichen zu erhalten
l4.configure(text = cleanmac)
l5.configure(text = dashmac)
l6.configure(text = colonmac)
l1.grid(row=3, column=0) #tk.label Text = "Clean : "
l2.grid(row=4, column=0) #tk.label Text = "Colon : "
l3.grid(row=5, column=0) #tk.label Text = "Dash : "
l4.grid(row=3, column=1) #tk.label Text = cleanmac
l5.grid(row=4, column=1) #tk.label Text = dashmac
l6.grid(row=5, column=1) #tk.label Text = colonmac
ctc1.grid(row=3, column=2) #tk.button um den Wert der Variablen cleanmac in die Zwischenablage zu kopieren
ctc2.grid(row=4, column=2) #tk.button um den Wert der Variablen dashmac in die Zwischenablage zu kopieren
ctc3.grid(row=5, column=2) #tk.button um den Wert der Variablen colonmac in die Zwischenablage zu kopieren
master = Tk() #Festlegen des root Fenster für tk
master.title("MAC Zauberer") #Titel des Fensters
master.resizable (width=NO, height=NO) #Fenster kann nicht vergrößert oder verkleinert werden
Label(master, font= "Verdana 10 bold", text="Eingabe: ", width=20).grid(row=0, column=0) #tk.label Text=Eingabe
master.bind("<Return>",lambda eff:fcheckmac(e1.get())) #Commando für das drücken der Enter Taste - Führe Funktion fcheckmac aus und übergebe den Wert aus dem Eingabefeld
#
#Konfiguration der Labels und Buttons die oben Verwendet werden
#
ctc1 = Button(master, font= "Verdana 10 " , text='ctc')
ctc2 = Button(master, font= "Verdana 10 " , text='ctc')
ctc3 = Button(master, font= "Verdana 10 " , text='ctc')
ctc1.configure(command=lambda: addToClipBoard(cleanmac))
ctc2.configure(command=lambda: addToClipBoard(dashmac))
ctc3.configure(command=lambda: addToClipBoard(colonmac))
l1 = Label(master, font= "Verdana 10 bold")
l2 = Label(master, font= "Verdana 10 bold")
l3 = Label(master, font= "Verdana 10 bold")
l4 = Label(master, font= "Verdana 10 ")
l5 = Label(master, font= "Verdana 10 ")
l6 = Label(master, font= "Verdana 10 ")
l7 = Label(master, justify=CENTER, bg = "red", font= "Verdana 10 bold")
l8 = Label(master, justify=CENTER, bg = "red", font= "Verdana 10 bold")
l9 = Label(master, justify=CENTER, bg = "red", font= "Verdana 10 bold")
l7.configure(text="Ungültiges Zeichen")
l8.configure(text="Zeichenanzahl ungültig")
l9.configure(text="Eingabe prüfen")
lblank = Label(master, justify=CENTER, text="")
e1 = Entry(master,font= "Verdana 10 ", justify=CENTER, width=20) #tk.entry - Eingabefeld für MAC-Adresse
e1.grid(row=0, column=1)
getclip=""
getclip = master.clipboard_get() #Kopieren der Zwischenablage in Variable
if len(getclip) < 20: #wenn die Zwischenablage weniger als 20 Zeichen hat
e1.insert(10,getclip) #wird diese in das Entry Feld eingetragen
b1=Button(master, width=10, font= "Verdana 10", text='Start', command=lambda: fcheckmac(e1.get())) #tk.Button = commando führt Funktion fcheckmac und übergibt den Wert aus dem Eingabefeld
b1.grid(row=0, column=3, padx=15)
clre1=Button(master, width=10, font= "Verdana 10", text='Clear', command=fclear)
clre1.grid(row=0 ,column=2, padx=5)
mainloop()