Kurioses Problem!

Fragen zu Tkinter.
Antworten
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()

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

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

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])

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

Ok.

Danke :).

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

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]#!/usr/bin/env python
import this[/code]
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

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

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

Hi!

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

Gruß, mawe
Antworten