Kurioses Problem!

Fragen zu Tkinter.
Iopodx@Gast

Kurioses Problem!

Beitragvon Iopodx@Gast » Dienstag 8. Februar 2005, 22:37

Hab ein echt kurioses Problem! Und zwar kann ich meine Checkbuttons nicht mehr auslesen!? Es geht schon. Aber nicht innerhalb meinen Programms. Es geht immer, aber nur NICHT in meinem Programm. Warum?

Hier mal der komplette code...

Code: Alles auswählen

from Tkinter import *
from thread import start_new_thread
from whatsonair1 import *
from os import remove
from time import sleep

all=[]
for current in allparsers:
    current=current()
    all.append(current.__station__)
print all
print allparsers


def update_it(var, root):
    while 1:
        uptodate=update(read_sets())
        i=0
        checksum=read_sets()
        for current in uptodate:
            if checksum[i]==1:
                var[i].set(current)
                i=i+1
def update(toupdate):
    i=0
    result=[]
    for current in allparsers:
        if toupdate[i]==1:
            try:
                current=current()
                current.feed(current.pagecontent)
                result.append(current.currenttrack())
            except:result.append('ERROR!')
        else:
            result.append(0)
        i=i+1
    return result

def save_settings(values, settingsroot):
    try:remove('WhatsOnAir_TkSettings.ini')
    except:pass
    file=open('WhatsOnAir_TkSettings.ini', 'w+')
    for current in values:
        print current
        current=current.get()
        print current
        file.write(current+'|#|')
    file.close()
    close_it(settingsroot)

def read_sets():
    file=open('WhatsOnAir_TkSettings.ini', 'r')
    result=file.read()
    result=result.split('|#|')
    stations=[]
    for current in result:
        if current=='':
            current=0
        stations.append(int(current))
    return stations

def close_it(window):
    window.quit()
    window.destroy()


def start():
    root=Tk()
    root.title('SeeWhatsOnAir_Tk 0.1')
    aa=0
    uptodate=update(read_sets())
    tracklabels=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    checksum=read_sets()
    var=[StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(),
         StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar()]
    for current in allparsers:
        if checksum[aa]==1:
            current=current()
            current=current.__station__
            var.append(StringVar())
            Label(root, text=current).place(x=4, y=20*aa)
            tracklabels[aa]=Label(root, textvariable=var[aa])
            var[aa].set(uptodate[aa])
            tracklabels[aa].place(x=100, y=20*aa)
        aa=aa+1
    Button(root, text='update', command=lambda:start_new_thread(update_it, (var, root))).place(x=60, y=20*aa+20)
    root.minsize(450, 20*aa+75)
    root.maxsize(450, 20*aa+75)
    menu = Menu(root)
    root.config(menu=menu)
    menu.add_command(label='New', command=settings)
    root.mainloop()

def settings():
    settingsroot=Tk()
    settingsroot.title('Settings')
    r=0
    stationchecks=[]
    v=[]
    for current in allparsers:
        current=current()
        current=current.__station__
        Label(settingsroot, text=current).place(x=4, y=20*r)
        v.append(StringVar())
        stationchecks.append(Checkbutton(settingsroot, variable=v[r]))
        stationchecks[r].place(x=150, y=20*r)
        stationchecks[r].select()
        print v[r].get()
        r=r+1
    settingsroot.minsize(200, 20*r+50)
    settingsroot.maxsize(200, 20*r+50)
    Button(settingsroot, text="Save", command=lambda:save_settings(v, settingsroot)).place(x=50, y=(20*r)+20)
    Button(settingsroot, text="Abort", command=lambda:close_it(settingsroot)).place(x=90, y=(20*r)+20)
    settingsroot.mainloop()

start()

antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Re: Kurioses Problem!

Beitragvon antimicro » Dienstag 8. Februar 2005, 23:36

Iopodx@Gast hat geschrieben:Hier mal der komplette code...

Code: Alles auswählen

...
var=[StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(),
         StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar()]
...


Fehlt da nicht etwas?

Code: Alles auswählen

var=[StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root),
         StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root), StringVar(root)]


Entschuldigung wenn ich Blech schreibe, ich habe das (natürlich) nicht getestet.
greetings
sebi
Iopodx@Gast

It Works!

Beitragvon Iopodx@Gast » Mittwoch 9. Februar 2005, 09:00

Wow, krassen Dank :).

Der Fehler hat mich übrigens gerettet.. mir ist grade die Festplatte gecrasht wo die Datei drauf war

*schwitz*

Also, es geht :). Ich hab nie gewusst das man da auch noch das Fenster mit übergeben kann. Naja, man lernt nie aus :)

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

Beitragvon mawe » Mittwoch 9. Februar 2005, 09:06

Hi!

Noch eine Kleinigkeit:
Statt der ewig langen Zeilen, kannst Du auch so etwas schreiben:

Code: Alles auswählen

tracklabels = [0]*16
...
var = [StringVar(root)]*16


Gruß, mawe
Iopodx@Gast

Beitragvon Iopodx@Gast » Mittwoch 9. Februar 2005, 09:41

Ok.

Danke :).

Hab nicht gewusst dass das auch mit Listen geht :)
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 9. Februar 2005, 13:53

mawe hat geschrieben:Hi!

Noch eine Kleinigkeit:
Statt der ewig langen Zeilen, kannst Du auch so etwas schreiben:

Code: Alles auswählen

tracklabels = [0]*16
...
var = [StringVar(root)]*16


Gruß, mawe


Vorsicht, hast du dann nicht 16 Referenzen auf die gleiche StringVar-Instanz?


Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Beitragvon Iopodx » Mittwoch 9. Februar 2005, 16:17

Ja, hab ich. Und das geht nicht. Aber kein Problem.. auch wenn ich daran fast verzweifelt bin... >_< egal. Irren ist männlich (ähm menschlich ;))
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 9. Februar 2005, 17:13

mir ist da gerade was eingefallen:

Code: Alles auswählen

var = [StringVar(root) for i in xrange(16)]

so sollten es 16 separate Instanzen werden :)


Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Donnerstag 10. Februar 2005, 20:26

Hi!

Hoppla! Sorry, ich sollte vielleicht die Dinge die ich vorschlage vorher prüfen :oops:

Gruß, mawe

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder