2016-07-20 51 views
1

好吧,首先我不知道这里的实际问题是什么,所以我不能拿出更准确的标题。也许你们中的一些人可以编辑它以使其准确tkinter.TclError:无效的命令名称“表”

以下是重现我遇到的问题的最小化代码。

from traybar import SysTrayIcon 
from cal import Calendar 
import Tkinter 

class Add(): 
    def __init__(self,master): 
     Calendar(master).pack() 

def add(systray): 
    root = Tkinter.Tk() 
    Add(root) 
    root.mainloop() 

SysTrayIcon("abc.ico","abc", (('Add',None, add),) ,default_menu_index=0).start() 

caltrabar分别为这些文件http://tkinter.unpythonic.net/wiki/TkTableCalendarhttps://github.com/Infinidat/infi.systray/blob/develop/src/infi/systray/traybar.py

如果您运行此操作,它将在选项AddQuit的windows计算机的系统托盘中创建一个图标。点击app打开日历,没问题。关闭压光机并再次点击Add。但是,这一次它不会打开日历并引发以下错误

` 
Traceback (most recent call last): 
File "_ctypes/callbacks.c", line 314, in 'calling callback function' 
File "C:\Users\Koushik Naskar\AppData\Roaming\Python\Python27\site-packages\traybar.py", line 79, in WndProc 
self._message_dict[msg](hwnd, msg, wparam.value, lparam.value) 
File "C:\Users\Koushik Naskar\AppData\Roaming\Python\Python27\site-packages\traybar.py", line 276, in _command 
self._execute_menu_option(id) 
File "C:\Users\Koushik Naskar\AppData\Roaming\Python\Python27\site-packages\traybar.py", line 283, in _execute_menu_option 
menu_action(self) 
File "C:\Users\Koushik Naskar\Desktop\So\temp.py", line 11, in add 
Add(root) 
File "C:\Users\Koushik Naskar\Desktop\So\temp.py", line 7, in __init__ 
Calendar(master).pack() 
File "C:\Users\Koushik Naskar\Desktop\So\cal.py", line 66, in __init__ 
state='disabled', browsecommand=self._set_selection) 
File "C:\Python27\lib\lib-tk\tktable.py", line 118, in __init__ 
Tkinter.Widget.__init__(self, master, 'table', kw) 
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2090, in __init__ 
(widgetName, self._w) + extra + self._options(cnf)) 
_tkinter.TclError: invalid command name "table" 
` 

此问题只当我使用SysTrayIconCalendarCalendar。相反,如果你用简单的出现TkinterButtonLabel等这个错误没有按不会出现。另外,我可以在正常的Tkinter GUI中正常使用Calendar窗口小部件(没有SysTrayIcon)多次,因为没有错误发生。现在我对这里发生的事情以及如何解决这个问题没有任何线索。 SysTrayIconCalendar有什么问题,以及为什么第一次打开GUI时不会发生错误?请帮忙。

回答

1

TkTableCalendar需要安装在lib-tk中的tktable模块(第三方模块通常进入lib/site-packages),如跟踪的这部分所示。

File "C:\Python27\lib\lib-tk\tktable.py", line 118, in __init__ 
Tkinter.Widget.__init__(self, master, 'table', kw) 

tktable模块要求您的tcl/tk安装具有tktable扩展名。该扩展定义了“表格”小部件。它不是在Windows上随Python安装的标准tcl/tk的一部分。因此

_tkinter.TclError: invalid command name "table" 

的tktable源代码(可能是一个TCL的和C的混合物)在SourceForge托管。 This page表示它 ActiveState Batteries Included分配的一部分。我不知道AS tcl/tk的免费版本是否具有所有“电池”。而且我不知道如何用新的替换你已有的tcl/tk安装。我个人会尽可能使用替代方案。

+0

为什么它不会在第一次或当我在通常的Tkinter GUI中使用'calendar'小部件时引发任何错误。 – Eular