Seite 1 von 1

Kurioses Problem!

Verfasst: Dienstag 8. Februar 2005, 22:37
von Iopodx@Gast
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()


Re: Kurioses Problem!

Verfasst: Dienstag 8. Februar 2005, 23:36
von antimicro
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.

It Works!

Verfasst: Mittwoch 9. Februar 2005, 09:00
von Iopodx@Gast
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!

Verfasst: Mittwoch 9. Februar 2005, 09:06
von mawe
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

Verfasst: Mittwoch 9. Februar 2005, 09:41
von Iopodx@Gast
Ok.

Danke :).

Hab nicht gewusst dass das auch mit Listen geht :)

Verfasst: Mittwoch 9. Februar 2005, 13:53
von Dookie
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

Verfasst: Mittwoch 9. Februar 2005, 16:17
von Iopodx
Ja, hab ich. Und das geht nicht. Aber kein Problem.. auch wenn ich daran fast verzweifelt bin... >_< egal. Irren ist männlich (ähm menschlich ;))

Verfasst: Mittwoch 9. Februar 2005, 17:13
von Dookie
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

Verfasst: Donnerstag 10. Februar 2005, 20:26
von mawe
Hi!

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

Gruß, mawe