Programm zieht viel RAM und wird langsam
Verfasst: Freitag 13. Juni 2014, 12:55
Hallo,
ich bin neu hier und in Python auch noch ziemlich am Anfang.
Habe ein Programm geschrieben, das quasi einen Kalender darstellen soll.
Dazu folgender Code:
Die Datei Kalender.py:
die Datei KalenderLogik.py:
Die Datei Kachel.py:
Die Datei HeaderKachel.py:
Die Datei TagKachel.py:
Die Datei Arrow.py:
Wenn ich das Programm ausführe, und ein paar mal auf die Arrows klicke, dann wird das Programm immer langsamer und man sieht im Systemmonitor, wie der Speicherverbrauch zunimmt.
Meine Frage: woran kann das liegen?
Ich benutze Python 3.3.1 unter Kubuntu.
Danke im Vorraus!
Gruß
ich bin neu hier und in Python auch noch ziemlich am Anfang.
Habe ein Programm geschrieben, das quasi einen Kalender darstellen soll.
Dazu folgender Code:
Code: Alles auswählen
# -*- coding: utf-8 -*-
from tkinter import *
from Kalender import *
def clicked(arg):
print("geklickt (Tag): " + str(arg))
root = Tk()
root.title("Kalender-Demonstration")
kalender = Kalender(clicked, root)
root.mainloop()
Code: Alles auswählen
# -*- coding: utf-8 -*-
from tkinter import *
from KalenderLogik import *
from TagKachel import *
from HeaderKachel import *
from Arrow import *
class Kalender(Frame):
def __init__(self, listener, master = None):
Frame.__init__(self, master)
self.pack()
self.KalenderLogik = KalenderLogik()
self.setToToday()
self.listener = listener
def rightArrowClicked(self, event):
print("rechter Pfeil")
self.KalenderLogik.increaseMonth()
self.updateIt()
def leftArrowClicked(self, event):
print("linker Pfeil")
self.KalenderLogik.decreaseMonth()
self.updateIt()
def createRightArrow(self):
self.rightArrow = Arrow("right", self.rightArrowClicked, self)
self.rightArrow.grid(row = 0, column = 6)
def createLeftArrow(self):
self.leftArrow = Arrow("left", self.leftArrowClicked, self)
self.leftArrow.grid(row = 0, column = 0)
def updateIt(self):
print(self.KalenderLogik.getMonth())
self.createKacheln()
self.createHeaderKacheln()
self.createMonthLabel()
self.createRightArrow()
self.createLeftArrow()
def setBackgroundColor(self, day, color):
self.TagKachelList[day-1].setBackgroundColor(color)
def createMonthLabel(self):
monthLabel = Canvas(self, width = 5*32, heigh = 30)
monthLabel.create_rectangle(2, 2, (5*32)-2, 28, fill = "white")
monthLabel.create_text((((5*32)-2)/2), 15, text = self.KalenderLogik.months[self.KalenderLogik.getMonth()-1] + " " + str(self.KalenderLogik.getYear()), font = 15)
monthLabel.grid(row = 0, column = 1, columnspan = 5)
def createHeaderKacheln(self):
self.HeaderKachelList = []
for i in range(0, 7):
day = self.KalenderLogik.days[i]
self.HeaderKachelList.append(HeaderKachel(day, self))
self.HeaderKachelList[i].grid(row = 1, column = i)
def createKacheln(self):
spacer = 6
self.TagKachelList = []
for iDay in range(0, self.KalenderLogik.getNumberOfDaysInMonth(self.KalenderLogik.getMonth(), self.KalenderLogik.getYear())):
self.TagKachelList.append(TagKachel(iDay+1, self))
self.TagKachelList[iDay].grid(row = int((iDay+spacer) / 7) + 2, column = (iDay+spacer) % 7)
def getDay(self):
return self.KalenderLogik.getDay()
def getMonth(self):
return self.KalenderLogik.getMonth()
def getYear(self):
return self.KalenderLogik.getYear()
def setDay(self, day):
self.KalenderLogik.setDay(day)
self.updateIt()
def setMonth(self, month):
self.KalenderLogik.setMonth(month)
self.updateIt()
def setYear(self, year):
self.KalenderLogik.setYear(year)
self.updateIt()
def setToToday(self):
self.KalenderLogik.setToToday()
self.updateIt()
def notify(self, message):
self.listener(message)
def setListener(self, listener):
self.listener = listener
Code: Alles auswählen
# -*- coding: utf-8 -*-
from time import *
class KalenderLogik:
def __init__(self, master = None):
self.days = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
self.months = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
self.setToToday()
def increaseMonth(self):
if self.month in range(1, 12):
self.month = self.month + 1
def decreaseMonth(self):
if self.month in range(2, 13):
self.month = self.month - 1
def setToToday(self):
lt = localtime()
self.year, self.month, self.day = lt[0:3]
def getYear(self):
return self.year
def getMonth(self):
return self.month
def getDay(self):
return self.day
def setYear(self, year):
self.year = year
def setMonth(self, month):
self.month = month
def setDay(self, day):
self.day = day
def getNumberOfDaysInMonth(self, month, year):
if month <= 7:
if month == 2:
if self.schaltjahr(year) == True:
return 29
else:
return 28
else:
if month % 2 == 0:
return 30
else:
return 31
else:
if month % 2 == 0:
return 31
else:
return 30
def schaltjahr(self, year):
if year % 4 == 0:
if year % 100 != 0:
return True
else:
if year % 400 == 0:
return True
else:
return False
Code: Alles auswählen
# -*- coding: utf-8 -*-
from tkinter import *
class Kachel(Frame):
def __init__(self, data, backgroundColor, textColor, master = None):
Frame.__init__(self, master)
self.data = data
self.master = master
self.backgroundColor = backgroundColor
self.textColor = textColor
self.Data = Canvas(self, width = 30, heigh = 30)
self.drawStuff()
self.Data.pack()
def drawStuff(self):
self.Data.create_rectangle(2, 2, 28, 28, fill = self.backgroundColor)
self.Data.create_text(15, 15, text = self.data, fill = self.textColor, font = 15)
def setBackgroundColor(self, color):
self.backgroundColor = color
self.drawStuff()
Code: Alles auswählen
# -*- coding: utf-8 -*-
from Kachel import *
class HeaderKachel(Kachel):
def __init__(self, day, master = None):
Kachel.__init__(self, day, "green", "red", master)
Code: Alles auswählen
# -*- coding: utf-8 *-*
from Kachel import *
class TagKachel(Kachel):
def __init__(self, day, master = None):
Kachel.__init__(self, day, "blue", "red", master)
self.Data.bind("<Button-1>", self.callback)
def callback(self, event):
self.master.notify(self.data)
Code: Alles auswählen
# -*- coding: utf-8 -*-
from tkinter import *
class Arrow(Frame):
def __init__(self, direction, listener, master = None):
Frame.__init__(self, master)
self.Data = Canvas(self, width = 30, heigh = 30)
self.Data.create_rectangle(2, 2, 28, 28, fill = "white")
self.drawArrow(direction)
self.Data.bind("<Button-1>", listener)
self.Data.pack()
def drawArrow(self, direction):
if direction == "right":
self.Data.create_text(15, 15, text = "->")
if direction == "left":
self.Data.create_text(15, 15, text = "<-")
Meine Frage: woran kann das liegen?
Ich benutze Python 3.3.1 unter Kubuntu.
Danke im Vorraus!
Gruß