Ich hätte gerne dass es den Gesamtpreis eines Artikels berechnet aus der menge multipliziert mit dem Einzelpreis.
In line 82 habe ich dies versucht bitte um Hilfe!
PS: Ich benutze Python 2.7.10
Code: Alles auswählen
# -*- coding: cp1252 -*-
from Tkinter import *
from tkMessageBox import *
from MultiListBox import MultiListbox
import shelve
shelvename = "inventory.slv"
class ProductEntry(Frame):
"""Interface for product entry."""
def __init__(self, parent = None):
"""Create, pack, and bind entry boxes and buttons for product entry."""
Frame.__init__(self)
self.pack()
self.master.title("Inventar Programm")
#---Anleitung
self.instructionFrame = Frame(self)
self.instructionFrame.pack()
Label(self.instructionFrame, text = "Bitte die Felder ausfüllen und auf 'Hinzufügen' drücken um ein Produkt ein zu tragen").pack()
#---Eingabefelder
self.entryFrame = Frame(self)
self.entryFrame.pack()
#---Überschriften
self.col1 = Label(self.entryFrame, text = "Artikelnummer")
self.col1.grid(row = 0, column = 0)
self.col2 = Label(self.entryFrame, text = "Artikel")
self.col2.grid(row = 0, column = 1)
self.col3 = Label(self.entryFrame, text = "Beschreibung")
self.col3.grid(row = 0, column = 2)
self.col4 = Label(self.entryFrame, text = "Menge")
self.col4.grid(row = 0, column = 3)
self.col5 = Label(self.entryFrame, text = "Einzelpreis")
self.col5.grid(row = 0, column = 4)
#self.col6 = Label(self.entryFrame, text = "Gesamtpreis")
#self.col6.grid(row = 0, column = 5)
#---Entry boxes
self.artNum = Entry(self.entryFrame, name = "artNum")
self.artNum.grid(row = 1, column = 0)
self.artikel = Entry(self.entryFrame, name = "artikel")
self.artikel.grid(row = 1, column = 1)
self.beschreibung = Entry(self.entryFrame, name = "beschreibung")
self.beschreibung.grid(row = 1, column = 2)
self.menge = Entry(self.entryFrame, name = "menge")
self.menge.grid(row = 1, column = 3)
self.einzelpreis = Entry(self.entryFrame, name = "einzelpreis")
self.einzelpreis.grid(row = 1, column = 4)
#self.gesamtpreis = Entry(self.entryFrame, name = "gesamtpreis")
#self.gesamtpreis.grid(row = 1, column = 5)
#---Produkt Eingabefeld
self.entryBtnFrame = Frame(self)
self.entryBtnFrame.pack()
self.newEntryBtn = Button(self.entryBtnFrame, text = "Produkt hinzufügen",
command = self.clickNewEntry)
self.newEntryBtn.pack(side = LEFT)
def clickNewEntry(self):
"""Get all entry boxes and write to inventory database."""
self.gesamtpreis = int(self.menge) * self.einzelpreis
self.key = self.artNum.get()
self.record = [self.artikel.get(), self.beschreibung.get(), self.menge.get(),
self.einzelpreis.get(), self.gesamtpreis.get()]
self.writeShelf(self.key, self.record)
self.artNum.delete(0, END)
self.artikel.delete(0, END)
self.beschreibung.delete(0, END)
self.menge.delete(0, END)
self.einzelpreis.delete(0, END)
#self.gesamtpreis.delete(0, END)
def writeShelf(self, key, record):
"""Opens DB, writes entries, then closes DB."""
self.database = shelve.open(shelvename)
self.database[self.key] = self.record
self.database.close()
class ProductDisplay(Frame):
"""Interface for product display"""
def __init__(self, parent = None):
"""Create, pack, and bind entry boxes and buttons for product display"""
Frame.__init__(self)
self.pack()
self.frameHeading = Frame(self)
self.frameHeading.pack()
self.frameHeadingTitle = Label(self.frameHeading, text = "Inventar",bg = "lightblue",
font = ("Arial", "28", "bold"))
self.frameHeadingTitle.pack()
self.showInventoryFrame = Frame(self).pack()
##Imported table-like multilist box
self.listBox = MultiListbox(self.showInventoryFrame, (("Artikelnummer", 5),
("Artikel", 20), ("Beschreibung", 40), ("Menge", 5), ("Einzelpreis", 5)
, ("Gesamtpreis", 5)))
self.listBox.pack(expand = YES, fill = BOTH)
#---Inventory display buttons
self.inventoryBtnFrame = Frame(self).pack()
self.fetchInven = Button(self.inventoryBtnFrame, text = "Aktualisieren",
command = self.getInven)
self.fetchInven.pack(side = LEFT)
self.modifyInven = Button(self.inventoryBtnFrame, text = "Produkt bearbeiten",
command = self.changeInven)
self.modifyInven.pack(side= LEFT)
self.deleteInven = Button(self.inventoryBtnFrame, text = "Produkt löschen",
command = self.clearEntry)
self.deleteInven.pack(side = LEFT)
self.clearInven = Button(self.inventoryBtnFrame, text = "Inventar leeren",
command = self.delInven)
self.clearInven.pack(side = LEFT)
def getInven(self):
"""Gets products from DB and displays them.
Opens the shelve, loops through each entry, prints the unpacked tuple
for each record, then closes the shelve."""
self.listBox.delete(0, END)
self.productList = shelve.open(shelvename)
for item in self.productList.keys():
(self.artik, self.beschreib, self.meng, self.einzelp,
self.gesamtp) = self.productList[item]
self.listBox.insert(END, (item, self.artik, self.beschreib, self.meng,
self.einzelp, self.gesamtp))
self.productList.close()
def clearEntry(self):
"""Deletes an entry from the database.
Gets the highlighted selection, makes a list of the the separate words,
'pops' the product number entry, finds the product number in the shelve,
deletes the product, then updates the inventory screen."""
ans = askokcancel("Produkt löschen", "Soll das ausgewählte Produkt wirklich gelöscht werden?") #popup window
if ans:
self.productList = shelve.open(shelvename)
self.getSelection = self.listBox.curselection() #get index of selection
self.selectedEntry = self.listBox.get(self.getSelection) #get tuple from selection
(self.productNum, self.artik, self.beschreib, self.meng, self.einzelp,
self.gesamtp) = self.selectedEntry #unpack tuple
self.entry = self.selectedEntry[0]
del self.productList[self.entry]
self.productList.close()
showinfo(title = "Produkt entfernt",
message = "Das Produkt wurde vom Inventar entfernt.")
self.getInven()
def changeInven(self):
"""Allows modification of a database entry.
Called by modifyInven Button"""
try:
self.getSelection = self.listBox.curselection() #get index of selection
self.selectedEntry = self.listBox.get(self.getSelection) #get tuple from selection
(self.artNum, self.artik, self.beschreib, self.meng, self.einzelp,
self.gesamtp) = self.selectedEntry #unpack tuple
self.editWindow = Toplevel()
self.editWindow.title("Gewähltes Produkt bearbeiten")
#---Edit product window widgets
Label(self.editWindow, text = "Artikelnummer").grid(row = 0, column = 0)
Label(self.editWindow, text = "Artikel").grid(row = 0, column = 1)
Label(self.editWindow, text = "Beschreibung").grid(row = 0, column = 2)
Label(self.editWindow, text = "Menge").grid(row = 0, column = 3)
Label(self.editWindow, text = "Einzelpreis").grid(row = 0, column = 4)
Label(self.editWindow, text = "Gesamtpreis").grid(row = 0, column = 5)
self.oldNum = Entry(self.editWindow, name = "artNum")
self.oldNum.grid(row = 1, column = 0)
self.oldartik = Entry(self.editWindow, name = "artik")
self.oldartik.grid(row = 1, column = 1)
self.oldBeschreib = Entry(self.editWindow, name = "beschreib")
self.oldBeschreib.grid(row = 1, column = 2)
self.oldMeng = Entry(self.editWindow, name = "meng")
self.oldMeng.grid(row = 1, column = 3)
self.oldEinzelp = Entry(self.editWindow, name = "einzelp")
self.oldEinzelp.grid(row = 1, column = 4)
self.oldGesamtp = Entry(self.editWindow, name = "gesamtp")
self.oldGesamtp.grid(row = 1, column = 5)
self.update = Button(self.editWindow, text = "Produkt bearbeiten",
command = self.updateProduct).grid(row = 2, column = 2)
self.cancel = Button(self.editWindow, text = "Abbrechen",
command = self.cancelProduct).grid(row = 2, column = 3)
#Label(self.editWindow,
# text = "This dialog only updates the prices and quantity.").grid(row =
#---Edit product data
self.oldNum.insert(END, self.artNum)
self.oldartik.insert(END, self.artik)
self.oldBeschreib.insert(END, self.beschreib)
self.oldMeng.insert(END, self.meng)
self.oldEinzelp.insert(END, self.einzelp)
self.oldGesamtp.insert(END, self.gesamtp)
except TclError:
showerror(title = "Fehler!", message = "Kein Produkt ausgewählt!")
def updateProduct(self):
"""Change the values of a database entry.
Called by changeInven Button."""
self.productList = shelve.open(shelvename)
self.oldEntry = self.oldNum.get()
self.newMeng = self.oldMeng.get()
self.newEinzelp = self.oldEinzelp.get()
self.newGesamtp = self.oldGesamtp.get()
self.newRecord = [self.artik, self.beschreib,
self.newMeng, self.newEinzelp, self.newGesamtp]
self.productList[self.oldEntry] = self.newRecord
self.productList.close()
self.editWindow.destroy()
def cancelProduct(self):
"""Verify canceling of product update."""
self.editWindow.destroy()
def delInven(self):
"""Deletes all entries in database."""
ans = askokcancel("Inventar löschen", "Soll das gesamte Inventar wirklich gelöscht werden?")
if ans:
self.productList = shelve.open(shelvename)
self.productList.clear()
self.productList.close()
showinfo(title = "Inventar gelöscht",
message = "Das gesamte Inventar wurde gelöscht.")
def main():
root = Tk()
root.geometry("900x500+150+100")
entry = ProductEntry(root)
display = ProductDisplay(root)
entry.pack()
display.pack()
root.mainloop()
if __name__ == "__main__":
main()