>tkinter< problem...

Fragen zu Tkinter.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Samstag 21. August 2004, 19:58

Hi lionking!

Milan und Dookie haben Dir ja schon sehr gute Tipps (mit "pp" - schrecklich :() gegeben. Wenn Du es ganz einfach haben willst, könntest Du es so versuchen:
Artikeldatei (artdat.dat):

Code: Alles auswählen

Name Nummer Preis Pfand Verkaufte_heute Lagerbestand Ladenbestand
Cola 1.0 0.5 0.25 0.0 0.0 0.0
Kekse 2.0 1.0 0.0 0.0 0.0 0.0
Broetchen 3.0 0.75 0.0 0.0 0.0 0.0
Pfand 0.0 -0.25 0.0 0.0 0.0 0.0

Code: Alles auswählen

# einlesen
f = file("artdat.dat","r")
self.art = [x.split() for x in f.readlines()]
for i in xrange(0,len(self.art),1):
   for j in xrange(0,len(self.art[i]),1):
      try:
         self.art[i][j] = float(self.art[i][j])
      except: pass

# schreiben
f = file("artdat.dat","w")
for i in xrange(0,len(self.art),1):
   for j in xrange(0,len(self.art[i]),1):
      f.write("%s " % str(self.art[i][j]))
   f.write("\n")


Gruß, mawe
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Samstag 21. August 2004, 20:09

Hi. Das einlesen sollte wenn so aussehen, sonst gibts ne leere Liste :wink: (wegen des x.split()[0])

Code: Alles auswählen

# einlesen
f = file("artdat.dat","r")
self.art = [x.split()[0] for x in f]
for i in self.art:
   for j in xrange(0,len(i),1):
      try:
         i[j] = float(i[j])
      except: pass


Ansonsten seh ich da keine Probleme, jetzt gibts 3 Möglichkeiten und das einbauen musst du schon selber machen. Am Anfang einmal einlesen und bei Bedarf speichern (nur ausführen davon) sollte dir ein leichtes sein. Alle drei sind auch im editor leicht zu bearbeiten, wobei ich allerdings CSV vorziehen würde :wink: Ist auch mit excel zu bearbeiten und macht nicht soviel zusätzlichen Speicherplatz weg wie XML...
lionking
User
Beiträge: 28
Registriert: Mittwoch 28. April 2004, 16:03

Beitragvon lionking » Samstag 21. August 2004, 20:17

so ist die liste aufgebaut:

Code: Alles auswählen

self.art=[
               ['Name','nummer','preis','pfand','verkauftheute','lagerbestand','ladenbestand'],
               ['Cola', 1, 0.5, 0.25, 0, 0, 0],
               ['Kekse', 2, 1.00, 0, 0,0,0],
               ['Broetchen', 3, 0.75, 0, 0,0,0],
               ['pfand',0,-0.25,0,0,0,0],
               ]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Samstag 21. August 2004, 20:20

Hi!

@Milan:
Versteh nicht was Du meinst. Hast Du Deine Methode ausprobiert? Ich bekomm dann als self.art folgendes:

Code: Alles auswählen

['Name', 'Cola', 'Kekse', 'Broetchen', 'Pfand']

Ist glaub ich nicht das Gewünschte :wink:

Gruß, mawe
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Samstag 21. August 2004, 20:33

Hi, hast recht... Ich hatte gerade was anderes gedacht, nämlich dass nur der Zeilenumsprung weggemacht werden müsste... Ist schon ok.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Samstag 21. August 2004, 20:37

Milan hat geschrieben:Alle drei sind auch im editor leicht zu bearbeiten, wobei ich allerdings CSV vorziehen würde Ist auch mit excel zu bearbeiten und macht nicht soviel zusätzlichen Speicherplatz weg wie XML...

Ich finde auch daß XML für eine so einfache Aufgabe etwas Overkill ist :wink:
Zum Thema Excel (Microsoft :shock: [mawe macht reflexartig eine Handbewegung um böse Geister abzuwehren]):
Wenn man in der Artikeldatei als Trennzeichen ein ";" verwendet und dann folgendes ändert:

Code: Alles auswählen

# einlesen
...
self.art = [x.split(';') for x in f.readlines()]
...
# schreiben
...
f.write("%s;" % str(self.art[i][j]))
...

kann man meine Methode und Excel (:shock:) verwenden (hihi! 8))

Gruß, mawe
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Samstag 21. August 2004, 20:44

HI. Dann muss ich wieder einsprechen, das ist der Grund warum ich extra importiere. Es könnten Semikolon (bzw Kommata) in der Datei sein, die zu den Namen gehöhren und somit auseinander gerissen werden und andererseits trennst du jetzt den Zeilenumsprung beim letzten Listenmitglied nicht mehr ab :P :lol:

mawe hat geschrieben:Zum Thema Excel (Microsoft :shock: [mawe macht reflexartig eine Handbewegung um böse Geister abzuwehren])


Dann nimm halt ein Posix-Äquivalent, gibts ja genug von :D .
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Samstag 21. August 2004, 20:53

Milan hat geschrieben:... trennst du jetzt den Zeilenumsprung beim letzten Listenmitglied nicht mehr ab

:oops: Hast recht. Verd$#@!! :wink:
Milan hat geschrieben:Es könnten Semikolon (bzw Kommata) ...

Spaltet Excel auch bei ,, ich dachte es nimmt nur ;. Daß nämlich ein Semikolon in diesen Daten vorkommt ist unwahrscheinlich, finde ich. Aber Du hast schon recht, das ist alles etwas zu unsicher.

Gruß, mawe
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Samstag 21. August 2004, 21:02

Hi. Das mit den Kommaspalten... keine Ahnung. Zur Sicherheit kann man ja mal nen eigenen Dialekt definieren:

Code: Alles auswählen

class MyDialect(csv.excel):
    delimiter=";"
    lineterminator="\n"


Den muss man dann beim erzeugen von Reader/writer Objekten mit angeben:

Code: Alles auswählen

...
    reader=csv.reader(filename,MyDialect)
...
    writer=csv.writer(filename,MyDialect)
...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Samstag 21. August 2004, 21:15

Hi! Gute Idee :D. Jetzt soll aber mal lionking entscheiden, welche Methode er verwendet. Wer weiß, ob er überhaupt was von Excel (:shock: :D) wissen will :wink:

Gruß, mawe
lionking
User
Beiträge: 28
Registriert: Mittwoch 28. April 2004, 16:03

Beitragvon lionking » Samstag 21. August 2004, 21:36

ich denke ich werde maves erste version nehmen, scheint mir am einfachsten...
Exel usw. brauch ich nich, man sollte die datei nur mit nem texteditor bearbeiten können...

und es funktioniert... Danke schonmal, vielleicht hab ich demnächst noch ne frage...
bis dann
lionking
User
Beiträge: 28
Registriert: Mittwoch 28. April 2004, 16:03

Beitragvon lionking » Samstag 21. August 2004, 22:44

so da kommt auch schon die nächste frage...

Code: Alles auswählen

self.bon=Tkinter.Text(bonframe, relief="groove", bd = "1", width = "40", height="8")
self.bon.grid(row=1, column=0)

in diesem "virtuellen kassenbon" werden die einzelnen artikel die verkauft wurden angezeigt...
jedoch wenn der inhalt zu gross wird geht es am unteren rand einfach weiter, und man sieht es nich mehr...
wie mache ich das, dass er automatisch runterscrollt?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Sonntag 22. August 2004, 06:41

Hi!

Dafür gibt's see:

Code: Alles auswählen

self.bon.see("end")

Wenn du auch noch eine Scrollbar dazuhaben willst, könntest Du das so machen:

Code: Alles auswählen

import Tkinter

class ScrolledText(Tkinter.Text):
   def __init__(self,parent):
      self.scrollbar = Tkinter.Scrollbar(parent)
      self.scrollbar.pack(side="right",fill="y")
      Tkinter.Text.__init__(self,parent,width=40,height=8,yscrollcommand=self.scrollbar.set)
      self.see("end")
      self.scrollbar.config(command=self.yview)

      
root = Tkinter.Tk()
st = ScrolledText(root)
st.pack()
root.mainloop()

Oder Du verwendest gleich PMW. Da ist sowas schon dabei.

Gruß, mawe

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder