簡體   English   中英

使用Tkinter和Python在Mac OS X中進行慣性滾動

[英]Inertial scrolling in Mac OS X with Tkinter and Python

我正在開發一個使用Tkinter作為Window管理器的Python 3.3項目。 我為畫布設置了鼠標滾輪事件。 滾動在Windows 7,8和Ubuntu中工作,但在Mac OS X Mountain Lion中使用Magic Mouse滾動時,程序會在Tk主循環中出現以下錯誤:

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

我的代碼是:

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

其中hscroll和vscroll是表單中的滾動條對象。

如果我使用普通鼠標,則不會出現問題。 當我嘗試使用觸控板滾動(慣性滾動打開)時也會發生這種情況

我是否必須更新Tk才能使此功能正常工作,或者它是否只是一般性地破壞了?

可以捕獲這些錯誤:

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

這似乎工作得很好,甚至是慣性滾動,並且不需要任何安裝/升級。

這看起來像這里描述的問題。 如果使用的是3.3(目前3.3.2)的python.org 64位/ 32位安裝,請確保您還安裝了最新版本ActiveTcl目前8.5.13,如注意到這里

海王星798,它應該工作。 顯然,這個錯誤在ActiveTcl 8.6中重新出現。 這絕對是Tk的一個錯誤,因為我在使用Python 3.4.4,3.5.4和3.6.2時遇到了同樣的問題。 所有這些都報告使用安裝在以下位置的Tcl / Tk庫:

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

我特意在ActiveTcl 8.6.6中遇到了這個錯誤,在降級到8.5.18.0后它就消失了。 檢查降級后Python使用了什么,它報告說:

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

注意它現在在/ Library中找到ActiveTcl,而不是/ System / Library

雖然他們不再提供舊版本下載,但我能夠找到一個仍然可以在這里工作的舊鏈接

使用Python 3.7,Tcl / Tk與Python捆綁在一起,而tkinter不再依賴於系統的Tcl / Tk版本。 我已經測試了CPython版本和Anaconda版本,並且兩者都包含了捆綁的Tcl / Tk 8.6。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM