tkinter.TclError:无效的命令名称“table”

时间:2016-07-20 15:53:40

标签: python multithreading tkinter tcl tktable

好的,首先我不知道这里的实际问题是什么,所以我无法想出一个更准确的标题。也许你们中的一些人可以编辑它以使其准确

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

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

如果您运行此操作,它将在Windows计算机的系统托盘中生成一个图标,其中包含AddQuit选项。点击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"
`

此问题仅在SysTrayIconCalendar一起使用时显示。如果您使用简单Calendar TkinterButton,则会显示Label等。此错误不会出现。我也可以在通常的Tkinter GUI中正常使用Calendar小部件(没有SysTrayIcon),因为没有错误发生。现在我对这里发生什么以及如何解决这个问题一无所知。 SysTrayIconCalendar有什么问题以及为什么第一次打开GUI时错误不会发生?请帮忙。

1 个答案:

答案 0 :(得分: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的混合)托管在SourceForgeThis page表示 是ActiveState Batteries Included分配的一部分。我不知道AS tcl / tk的免费版本是否包含所有电池'。而且我不知道如何用新的tcl / tk替换已经安装的tcl / tk。如果可能,我个人会使用替代方案。