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"
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
@mmgp potrzebujesz zmiennych Tcl do takich zdarzeń jak wyzwalanie, gdy zmienna ulega zmianie. – korylprince
@ 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 .. –