2012-12-19 5 views
12

Napisałem program w języku Python za pomocą interfejsu GUI tkinter GUI. Po uruchomieniu skryptu nie występują żadne problemy.Nie można ustawić wartości za pomocą skryptu tkinter/python podczas korzystania z cxfreeze

Spakowałem go przy pomocy cx_freeze do pliku exe, a jego uruchomienie działa w większości programów. Ma jednak problem: przy próbie przypisania wartości do obiektu StringVar w jednej z funkcji, wyjątek jest zgłaszany i zabija program.

Gdy ta sama funkcja jest dostępna z innego punktu programu, działa normalnie. Masz pojęcie, co może być nie tak?

Część kodu, który powoduje, że problem jest następujący (dodałem messagebox więc mogłem zobaczyć, co nie powiodło się):

if keyDetail.get('default', False): 
    try: 
     self.entries[key].set(keyDetail['default']) 
    except Exception as err: 
     messagebox.showinfo('error', 'key: %s, default: %s, error: %s'%(key, keyDetail['default'], err)) 

self.entries[key] jest tk.StringVar.

Gdy ta jest prowadzona, pojawia się następujący komunikat w messagebox:

key: orderNo, default: Order Number, error: can't set "PY_VAR16:0"

+0

Nie jestem pewien, dlaczego Tcl nie ustawiłby wartości dla zmiennej, która nie jest tablicą, ponieważ w efekcie powstałaby zmienna, nawet gdyby nie istniała. Ale jeśli nie jest za późno na twój program, moją wskazówką jest zrzucenie użycia zmiennych Tcl; nie potrzebujesz tego w swoim kodzie Pythona. Poza tym lubisz globalne zmienne? Kiedy tworzysz zmienną Tcl poprzez Tkinter, zawsze tworzysz zmienne globalne (bez twojej wiedzy o tym). Jeśli byłeś w czystym kodzie Tcl, to tworzenie zmiennych (lokalnych) jest koniecznością, ale masz już takie rzeczy w Pythonie. Możesz umówić się na korzystanie z Tkintera. – mmgp

+0

@mmgp potrzebujesz zmiennych Tcl do takich zdarzeń jak wyzwalanie, gdy zmienna ulega zmianie. – korylprince

+0

@ Trengot - czy możesz wkleić inne części kodu tutaj, lub na pastebin? Myślę, że powyższe rzeczy nie wystarczą, aby złapać problem .. –

Odpowiedz

0

patrz wyżej opis problemu. Błąd nie był:/ta sekcja kodu.

+0

Jeśli błąd nie był tą sekcją kodu, po prostu usuń pytanie lub edytuj je, aby miało to sens. – nbro

Powiązane problemy