ich bin der neue und Poste jetzt öfters.
Im voraus schoneinmal vielen dank an die Regulars hier in diesem Forum. Durch eure guten Tutorials und Hilfestellungen ist mir der Anfang in der Python Programmierung sehr viel leichter gefallen.
Nachdem ich so viel Wissen von euch abgeschöpft habe (und das ohne euch zu fragen o.O) und im sinne der Open-Source-Philosophie will jetzt auch mal mein erstes Programm veröffentlichen und euch gleich dazu bitten mir eventuelle verbesserungen vorzuschlagen.
Das wichtigste zum Programm:
Es soll eine Art verschnitt Optimierung werden mit der ich eventuel material einsparen kann.Also wie wir es früher im Bastelunterricht machen mussten , die gröst mögliche Kartonfläche ausnutzen und so wenig wie möglich wegwerfen . In meinem Fall ist es kein Karton sondern Rohre .
Der größte Teil des Code's läuft , hatt aber noch so ein Paar macken (z.b Reste von bereits geschnittenen Rohren noch weiter zu verwerten).
Code: Alles auswählen
import tkinter as tk
import copy
class MyApp(tk.Frame):
def __init__(self,root):
self.myFrame=tk.Frame.__init__(self,root)
self.HauptMenuBar(root)
self.auto_resize(root)
self.container(self)
def HauptMenuBar(self,root):
menuBar = tk.Menu(root)
root.config(menu=menuBar)
menuFile = tk.Menu(menuBar, tearoff = False)
menuFile.add_command(label='Oeffnen')
menuFile.add_separator()
menuFile.add_command(label='Schliesen',command=self.schliesen)
menuBar.add_cascade(label='Datei',menu=menuFile)
#Menu2
menuFile2 = tk.Menu(root, tearoff = False)
menuFile2.add_command(label='Schnelle Hilfe')
menuFile2.add_command(label='Version',command=self.Version)
menuFile2.add_command(label='Impresum')
menuBar.add_cascade(label='Hilfe',menu=menuFile2)
#Menu3
menuFile3 = tk.Menu(root,tearoff = False)
menuFile3.add_command(label='Aufloesung')
menuBar.add_cascade(label='Einstellungen',menu=menuFile3)
def container (self,root):
self.auftragsposition = list()
self.myList = list()
spinlist = list ()
self.merker_dict={}
for i in range (0,241,1):
i = tk.StringVar()
i.set(0)
self.myList.append(i)
v1 = tk.IntVar()
self.v = v1
# Handels Laengen bestimmen
tk.Radiobutton(self.myFrame,text='Rohrlaenge : 6500mm',variable=v1,value=6500).grid(row=0,column=0,padx=5,pady=2,sticky=tk.W+tk.N)
tk.Radiobutton(self.myFrame,text='Rohrlaenge : 6000mm',variable=v1,value=6000).grid(row=1,column=0,padx=5,pady=2,sticky=tk.W+tk.N)
tk.Radiobutton(self.myFrame,text='Rohrlaenge : 7000mm',variable=v1,value=7000).grid(row=2,column=0,padx=5,pady=2,sticky=tk.W+tk.N)
tk.Radiobutton(self.myFrame,text='Rohrlaenge : 8000mm',variable=v1,value=8000).grid(row=3,column=0,padx=5,pady=2,sticky=tk.W+tk.N)
# Spinnbox fuer die Einspannlaenge
tk.Label(self.myFrame,text='Einspannlaengen in mm :').grid ( row=4 ,column=0,sticky=tk.N+tk.W,padx=5,pady=2)
self.spinbox1 = self.spinbox = tk.Spinbox(self.myFrame,width=20)
for i in range (20,110,10):
spinlist.append(i)
self.spinbox1['values'] = spinlist
self.spinbox1.grid(row=5,column=0,pady=2,sticky = tk.N+tk.W,padx=5)
#Entry fuer Anzahl der Auftrags Position
tk.Label(text='Auftragspositions Nummer : ').grid(row=8,column=0,sticky=tk.N+tk.W,padx=5,pady=2)
self.entry_anzahl_auftragsposition=tk.Entry(self.myFrame,width=30)
self.entry_anzahl_auftragsposition['textvariable'] = self.myList[1]
self.entry_anzahl_auftragsposition.grid(row = 9 , column=0,padx=5,sticky=tk.W+tk.N,pady=2)
tk.Button(self.myFrame,text='Uebernehmen',command=self.entrys).grid(row=10,column=0,sticky=tk.N+tk.S+tk.W+tk.E,padx=5,pady=2)
def entrys (self):
mystring_anzahl= 'Rohr_Anzahl_'
mystring_laenge='Rohr_Laenge_'
myint = 0
root1 = tk.Tk()
counter = 0
counter1=2
counter2=1
counter3 = 1
counter4 = 1
counter5= 1
index = 0
self.auftragsposition = int(self.entry_anzahl_auftragsposition.get())+1
tk.Button(root1,text='Ich bin ein Test o.O',command=self.Auswertung).grid(row=1,column=6,sticky=tk.N+tk.S+tk.W+tk.E,padx=5,pady=2)
for index in range (1,40,1):
tk.Grid.rowconfigure(root1,index,weight=1)
tk.Grid.columnconfigure(root1,index,weight=1)
index = index + 1
for row in range(1,self.auftragsposition,1):
counter += 1
counter2+=1
counter5 += 1
if row <= 20 :
myint = myint +1
mystring_laenge +=str(myint)
mystring_anzahl += str(myint)
tk.Label(root1,text=str(counter)+'.',anchor=tk.W).grid(row=counter2,column=0,sticky=tk.W+tk.N,padx=3,pady=2)
tk.Label(root1,text=str(counter)+'.',anchor=tk.W).grid(row=counter2,column=1,sticky=tk.W+tk.N,padx=3,pady=2)
self.entry_anzahl = tk.Entry(root1,width=6)
self.entry_anzahl['textvariable'] = self.myList[counter5]
self.entry_anzahl.grid(row = counter2 , column=0,sticky=tk.E+tk.N,pady=2)
self.merker_dict[mystring_anzahl]=self.entry_anzahl
counter5 +=1
self.entry_laenge=tk.Entry(root1,width=6)
self.entry_laenge['textvariable'] = self.myList[counter5]
self.entry_laenge.grid(row = counter2 , column=1,sticky=tk.E+tk.N,pady=2)
self.merker_dict[mystring_laenge]=self.entry_laenge
#self.entry_anzahl1=tk.Entry(root1,width=6).grid(row = counter2 , column=1,sticky=tk.E+tk.N,pady=2)
#print(mystring)
mystring_anzahl='Rohr_Anzahl_'
mystring_laenge = 'Rohr_Laenge_'
if counter == 1 :
tk.Label(root1,bg='Khaki',relief=tk.SOLID,text=' Nr. Anzahl ',anchor=tk.W).grid(row=1,column=0,sticky=tk.W+tk.N+tk.E+tk.S,pady=2,padx=2)
tk.Label(root1,bg='Khaki',relief=tk.SOLID,text=' Nr. Laenge ',anchor=tk.W).grid(row=1,column=1,sticky=tk.W+tk.N+tk.E+tk.S,pady=2,padx=2)
else:
pass
elif row >= 21 and row < 41 :
myint = myint +1
mystring_laenge +=str(myint)
mystring_anzahl += str(myint)
counter3 += 1
tk.Label(root1,text=str(counter)+'.',anchor=tk.W).grid(row=counter3,column=2,sticky=tk.W+tk.N,padx=3,pady=2)
tk.Label(root1,text=str(counter)+'.',anchor=tk.W).grid(row=counter3,column=3,sticky=tk.W+tk.N,padx=3,pady=2)
self.entry_anzahl=tk.Entry(root1,width=6)
self.entry_anzahl['textvariable'] = self.myList[counter5]
self.entry_anzahl.grid(row = counter3 , column=2,sticky=tk.E+tk.N,pady=2)
self.merker_dict[mystring_anzahl]=self.entry_anzahl
counter5 +=1
self.entry_laenge=tk.Entry(root1,width=6)
self.entry_laenge['textvariable'] = self.myList[counter5]
self.entry_laenge.grid(row = counter3 , column=3,sticky=tk.E+tk.N,pady=2)
self.merker_dict[mystring_laenge]=self.entry_laenge
mystring_anzahl='Rohr_Anzahl_'
mystring_laenge = 'Rohr_Laenge_'
if counter == 21 :
tk.Label(root1,bg='Khaki',relief=tk.SOLID,text=' Nr. Anzahl ',anchor=tk.W).grid(row=1,column=2,sticky=tk.W+tk.N+tk.E+tk.S,pady=2,padx=2)
tk.Label(root1,bg='Khaki',relief=tk.SOLID,text=' Nr. Laenge ',anchor=tk.W).grid(row=1,column=3,sticky=tk.W+tk.N+tk.E+tk.S,pady=2,padx=2)
else:
pass
elif row >= 41 and row < 61 :
myint = myint +1
mystring_laenge +=str(myint)
mystring_anzahl += str(myint)
counter4 += 1
tk.Label(root1,text=str(counter)+'.',anchor=tk.W).grid(row=counter4,column=4,sticky=tk.W+tk.N,padx=3,pady=2)
tk.Label(root1,text=str(counter)+'.',anchor=tk.W).grid(row=counter4,column=5,sticky=tk.W+tk.N,padx=3,pady=2)
self.entry_anzahl=tk.Entry(root1,width=6)
self.entry_anzahl['textvariable'] = self.myList[counter5]
self.entry_anzahl.grid(row = counter4 , column=4,sticky=tk.E+tk.N,pady=2)
self.merker_dict[mystring_anzahl]=self.entry_anzahl
counter5 += 1
self.entry_laenge=tk.Entry(root1,width=6)
self.entry_laenge['textvariable'] = self.myList[counter5]
self.entry_laenge.grid(row = counter4 , column=5,sticky=tk.E+tk.N,pady=2)
self.merker_dict[mystring_laenge]=self.entry_laenge
mystring_anzahl='Rohr_Anzahl_'
mystring_laenge = 'Rohr_Laenge_'
if counter == 41 :
tk.Label(root1,bg='Khaki',relief=tk.SOLID,text=' Nr. Anzahl ',anchor=tk.W).grid(row=1,column=4,sticky=tk.W+tk.N+tk.E+tk.S,pady=2,padx=2)
tk.Label(root1,bg='Khaki',relief=tk.SOLID,text=' Nr. Laenge ',anchor=tk.W).grid(row=1,column=5,sticky=tk.W+tk.N+tk.E+tk.S,pady=2,padx=2)
else:
pass
elif row == 61 :
break
counter = 0
counter2=6
root1.mainloop()
def Hilfe(self):
print(help(tk.Label))
def Auswertung(self):
merker_dict = {}
fertige_Rohre_dict = {}
anzahl_haendler_rohre = 0
rest_rohre = list()
fertige_Rohre_liste=list()
rest_gesamt = {}
switch = False
fertige_Rohre = 0
rohr='Rohr_'
schwund = 5
mystring_anzahl= 'Rohr_Anzahl_'
mystring_laenge='Rohr_Laenge_'
arbeitsdurchgang='Arbeitsdurchgang_'
fertiges_Rohr ='Rohr_'
myint=0
myint1=0
myint_letzter=0
theorethische_Rohranzahl = 0
# try:
for val in range (1,self.auftragsposition,1):
myint = myint +1
mystring_laenge +=str(myint)
mystring_anzahl += str(myint)
var_anzahl = self.merker_dict[mystring_anzahl]
merker_dict[mystring_anzahl] =int(var_anzahl.get())
var_laenge = self.merker_dict[mystring_laenge]
merker_dict[mystring_laenge]=int(var_laenge.get())
theorethische_Rohranzahl = theorethische_Rohranzahl + (merker_dict[mystring_anzahl]*merker_dict[mystring_laenge])
mystring_anzahl= 'Rohr_Anzahl_'
mystring_laenge='Rohr_Laenge_'
fertiges_Rohr='Rohr_'
myint=0
val=0
# Hier werden die Radiobuttons ausgeweretet
if self.v.get() == 6000 :
haendler_laenge = float(6000)
elif self.v.get() == 6500 :
haendler_laenge = float(6500)
elif self.v.get() == 7000 :
haendler_laenge = float(7000)
elif self.v.get() == 8000:
haendler_laenge = float(8000)
bearbeitungslaenge = haendler_laenge - ((float(self.spinbox.get()))+ ((float(self.spinbox.get()))*(schwund/100)))
theorethische_Rohranzahl = theorethische_Rohranzahl/haendler_laenge
for laenge in merker_dict.values():
if laenge > haendler_laenge:
print('FEHLER : Das Rohr mit der Laenge ' + str(laenge) + ' ist groeser als das Haendlerrohr')
ok = False
break
else:
ok = True
myint_letzter = self.auftragsposition - 1
for val in range(1,self.auftragsposition-1,1):
fertige_Rohre=0
myint = myint +1
mystring_laenge +=str(myint)
mystring_anzahl += str(myint)
arbeitsdurchgang +=str(myint)
fertiges_Rohr +=str(myint)
jolo = True
fertige_Rohre_dict.setdefault(fertiges_Rohr)
if fertige_Rohre_dict[fertiges_Rohr] == None:
fertige_Rohre_dict[fertiges_Rohr] = 0
else:
pass
while merker_dict[mystring_anzahl] >= 0 and ok is True :#Rohr (x) wird abgefragt auf laenge und anzahl.
if jolo != True:
mystring_anzahl='Rohr_Anzahl_'
mystring_laenge='Rohr_Laenge_'
fertiges_Rohr='Rohr_'
arbeitsdurchgang='Arbeitsdurchgang_'
break
elif bearbeitungslaenge > merker_dict[mystring_laenge] and merker_dict[mystring_anzahl]>0 and merker_dict[mystring_laenge] > 0 :
bearbeitungslaenge = bearbeitungslaenge - merker_dict[mystring_laenge]
fertige_Rohre_dict[fertiges_Rohr] += 1
merker_dict[mystring_anzahl] = merker_dict[mystring_anzahl] - 1
elif bearbeitungslaenge <= merker_dict[mystring_laenge] and merker_dict[mystring_anzahl]>0:#Ruecksetzten der Haendlerlaenge sobald Rohr(x) zu klein wird
anzahl_haendler_rohre = anzahl_haendler_rohre + 1
rest_rohre.append(bearbeitungslaenge)
bearbeitungslaenge = haendler_laenge - ((float(self.spinbox.get())) + ((float(self.spinbox.get()))*(schwund/100)))
elif merker_dict[mystring_anzahl] == 0 and switch is not True :#Nach bearbeitung des letzten rohres wird ein neues haendlerrohr genommen und der Rest in die reste liste gelegt
rest = bearbeitungslaenge
switch = True
anzahl_haendler_rohre = anzahl_haendler_rohre+1
rest_rohre.append(rest)
bearbeitungslaenge = haendler_laenge - ((float(self.spinbox.get())) + ((float(self.spinbox.get()))*(schwund/100)))
rest = 0
elif merker_dict[mystring_anzahl] == 0 and switch is True :
mystring_anzahl_schluss= 'Rohr_Anzahl_'
mystring_laenge_schluss='Rohr_Laenge_'
fertiges_Rohr_schluss ='Rohr_'
fertige_Rohre = 0
mystring_anzahl_schluss+=str(myint_letzter)
mystring_laenge_schluss+=str(myint_letzter)
fertiges_Rohr_schluss+=str(myint_letzter)
if merker_dict[mystring_anzahl_schluss]>0:
pass
else:
mystring_anzahl_schluss= 'Rohr_Anzahl_'
mystring_laenge_schluss='Rohr_Laenge_'
fertiges_Rohr_schluss ='Rohr_'
myint_letzter-=1
mystring_anzahl_schluss+=str(myint_letzter)
mystring_laenge_schluss+=str(myint_letzter)
fertiges_Rohr_schluss+=str(myint_letzter)
fertige_Rohre_dict.setdefault(fertiges_Rohr_schluss)
if fertige_Rohre_dict[fertiges_Rohr_schluss] == None:
fertige_Rohre_dict[fertiges_Rohr_schluss] = 0
else:
pass
while max(rest_rohre) >= merker_dict[mystring_laenge_schluss] or max(rest_rohre) < merker_dict[mystring_laenge_schluss] and merker_dict[mystring_anzahl_schluss] >= 0 :
if max(rest_rohre) >= merker_dict[mystring_laenge_schluss] and merker_dict[mystring_anzahl_schluss] > 0:
rest_rohre.append (int(max(rest_rohre)) - merker_dict[mystring_laenge_schluss])
rest_rohre.remove(max(rest_rohre))
merker_dict[mystring_anzahl_schluss]=merker_dict[mystring_anzahl_schluss] - 1
fertige_Rohre = 1 +fertige_Rohre_dict[fertiges_Rohr_schluss]
fertige_Rohre_dict[fertiges_Rohr_schluss] = fertige_Rohre
elif max(rest_rohre)<merker_dict[mystring_laenge_schluss] or merker_dict[mystring_anzahl_schluss] == 0 :
switch = False
rest_gesamt[arbeitsdurchgang]=copy.deepcopy(rest_rohre)
rest_rohre.clear()
jolo=False
break
print(merker_dict)
print(rest_gesamt)
print(fertige_Rohre_dict)
print(anzahl_haendler_rohre)
print(theorethische_Rohranzahl)
def Version (self):
print('aktuelle Version : Alpha 0.6')
def oeffnen (self,master=None):
pass
def schliesen(self):
MyApp.quit(self)
def Berechnen(self):
pass
def auto_resize(self,root):
index = 0
for index in range (0,10,1):
tk.Grid.rowconfigure(root,index,weight=1)
tk.Grid.columnconfigure(root,index,weight=1)
index = index + 1
def main():
root = tk.Tk()
root.title('*****')
app = MyApp(root)
root.mainloop()
if __name__ =="__main__":
main()
LG Psijic