簡體   English   中英

為什么Windows上的Tkinter堆棧溢出?

[英]Why does Tkinter stack overflow on Windows?

這個簡短的Python腳本debugwin.py在我的Linux機器上運行良好:

>>> import debugwin
>>> l = []
>>> debuwin.watch(l)
0
>>> l.append(1)

然而, 有人告訴我 ,在Windows(Python 2.7.3 Windows 7)上,它有時在你追加后不會更新,有時會出現堆棧溢出:

>>> error in background error handler:
    out of stack space (infinite loop?) while executing "::tcl::Bgerror {out of stack
    space (infinite loop?)} {-code 1 -level 0 -errorcode NONE -errorinfo {out of stack
    space (infinite loop?)Unable to format..."

腳本如何溢出?

如果為報告錯誤而編寫的代碼有錯誤,它可能會溢出。 當它試圖報告錯誤時它調用錯誤報告代碼,但它有一個錯誤,所以它試圖調用錯誤報告代碼,...我不是說這是問題,但這至少是一種方法來獲得什么你看到了。

使用你鏈接到的debugwin.py代碼崩潰我並不是特別感到驚訝(至少在我寫這篇文章的時候是代碼的版本)。 Tkinter不是線程安全的,傳統的觀點是它應該只在應用程序的主線程中運行。 看起來代碼在子線程中創建了一個tk解釋器。 因此,即使錯誤報告代碼中沒有錯誤,tcl解釋器在子線程中運行的事實使我認為它可能與線程相關。 當然,崩潰似乎是隨機的這一事實讓我相信它與線程有關。

我看到另一件看起來有點可疑的事情。 所有小部件都有一個調用標准tk update命令的update方法。 您有一個繼承自Label的小部件,並且您創建了自己的update方法。 這可能不會導致任何問題,但這是代碼味道。

暫無
暫無

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

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