2013-06-08 4 views
5

Sto lavorando a un progetto Python 3.3 che utilizza Tkinter come gestore di finestre. Ho degli eventi con rotellina del mouse impostati per una tela. Lo scorrimento funziona in Windows 7, 8, e Ubuntu, ma su di scorrimento con un Magic Mouse in Mac OS X Mountain Lion, il programma si blocca con teh seguente errore nel ciclo principale Tk:Scorrimento inerziale in Mac OS X con Tkinter e Python

File "/Users/xxxx/Documents/Repositories/tycoon/agentsim.py", line 291, in start 
    self._root.mainloop() 
    File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/__init__.py", line 1038, in mainloop 
self.tk.mainloop(n) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 0: invalid continuation byte 

Il mio codice è stato:

dove hscroll e vscroll sono oggetti della barra di scorrimento nel modulo.

Se utilizzo un mouse normale, il problema non si verifica. Si verifica anche quando provo a scorrere con il trackpad (con lo scorrimento inerziale attivato)

Devo aggiornare Tk per far funzionare questa funzionalità, o è solo rotto in generale?

risposta

1

Sembra il problema descritto here. Se si utilizza il programma di installazione python.org 64-bit/32-bit per 3.3 (attualmente 3.3.2), assicurarsi di aver installato anche l'ultima versione di ActiveTcl, attualmente 8.5.13, come indicato in here.

+0

Questo non sembra risolvere il problema. Forse il bug è stato reintrodotto? – dougalg

+0

Avete installato ActiveTcl 8.5.15? –

+1

Ho appena risolto il problema. Il problema è con la versione di Python che avevo da Homebrew. Dopo aver installato la versione ufficiale di python3 ha funzionato bene. – dougalg

2

Questi errori possono essere catturati:

while True: 
    try: 
     root.mainloop() 
     break 
    except UnicodeDecodeError: 
     pass 

Questo sembra funzionare perfettamente, anche lo scorrimento inerziale, e non richiede alcuna installazione/aggiornamento.

1

Neptune798, dovrebbe funzionare. Apparentemente questo bug è riemerso in ActiveTcl 8.6. È sicuramente un bug con Tk, perché ho riscontrato lo stesso problema testando con Python 3.4.4, 3.5.4 e 3.6.2. Tutti hanno dichiarato utilizzando le librerie Tcl/Tk installate in:

**/System**/Library/Frameworks/Tcl.framework/Versions/8.5/ 

ho incontrato questo bug con ActiveTcl 8.6.6 specifico, e dopo il downgrade a 8.5.18.0 è andato via. Controllo che cosa Python stava usando dopo il downgrade, ha segnalato:

>>> import tkinter 
>>> root = tkinter.Tk() 
>>> print(root.tk.exprstring('$tcl_library')) 
/Library/Frameworks/Tcl.framework/Versions/8.5/Resources/Scripts 
>>> print(root.tk.exprstring('$tk_library')) 
/Library/Frameworks/Tk.framework/Versions/8.5/Resources/Scripts 

Avviso è trovare ActiveTcl in poco/Library ora, non/System/Library

Anche se non offrono le vecchie versioni per il download più a lungo, Sono stato in grado di trovare un vecchio collegamento che funziona ancora here