2013-06-08 53 views
5

Tôi đang làm việc trên dự án Python 3.3 sử dụng Tkinter làm trình quản lý cửa sổ. Tôi có các sự kiện bánh xe cuộn chuột được thiết lập cho canvas. Các di chuyển các công trình trong Windows 7, 8, và Ubuntu, nhưng khi di chuyển với một Mouse Magic trong Mac OS X Mountain Lion, chương trình bị treo với teh lỗi sau trong vòng lặp chính Tk:Cuộn quán tính trong Mac OS X bằng Tkinter và 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 

Mã của tôi là:

self._hscroll.configure(command=self._canvas.xview) 
self._vscroll.configure(command=self._canvas.yview) 
self._canvas.bind('<MouseWheel>', lambda event: self.rollWheel(event)) 

nơi hscroll và vscroll là các đối tượng thanh cuộn trong biểu mẫu.

Nếu tôi sử dụng chuột thông thường, sự cố không xảy ra. Nó cũng xảy ra khi tôi thử cuộn bằng bàn di chuột của mình (với tính năng cuộn quán tính được bật)

Tôi có phải cập nhật Tk để chức năng này hoạt động không?

Trả lời

1

Điều này có vẻ như sự cố được mô tả here. Nếu bạn đang sử dụng trình cài đặt python.org 64 bit/32 bit cho 3.3 (hiện tại 3.3.2), hãy đảm bảo bạn cũng đã cài đặt bản phát hành ActiveTcl mới nhất, hiện tại là 8.5.13, như được ghi chú here.

+0

Điều này dường như không giải quyết được sự cố. Có thể lỗi đã được giới thiệu lại? – dougalg

+0

Bạn đã cài đặt ActiveTcl 8.5.15 chưa? –

+1

Tôi vừa giải quyết được vấn đề. Vấn đề là với phiên bản Python tôi có từ Homebrew. Sau khi cài đặt bản phát hành python3 chính thức, nó hoạt động tốt. – dougalg

2

Những lỗi này có thể bị bắt:

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

Điều này dường như làm việc một cách hoàn hảo, thậm chí di chuyển quán tính, và không yêu cầu bất kỳ cài đặt/nâng cấp.

1

Neptune798, Nó sẽ hoạt động. Rõ ràng lỗi này đã tái xuất hiện trong ActiveTcl 8.6. Đó chắc chắn là một lỗi với Tk, khi tôi gặp phải sự cố kiểm tra tương tự với Python 3.4.4, 3.5.4 và 3.6.2. Tất cả trong số họ báo cáo bằng cách sử dụng thư viện Tcl/Tk được cài đặt trong:

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

tôi gặp phải lỗi này với ActiveTcl 8.6.6 đặc biệt, và sau khi hạ để 8.5.18.0 nó ra đi. Kiểm tra những gì Python được sử dụng sau khi hạ cấp, nó báo cáo:

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

Thông báo nó tìm ActiveTcl chỉ trong/Library bây giờ, không/System/Library

Mặc dù chúng tôi không cung cấp các phiên bản cũ để tải về bất kỳ lâu hơn, Tôi đã có thể tìm thấy liên kết cũ vẫn hoạt động here