Python 第一次使用tkinter时,未知错误:Tcl错误

Python 第一次使用tkinter时,未知错误:Tcl错误,python,tkinter,Python,Tkinter,我正在尝试为闹钟应用程序创建一个下拉菜单,以便在闹钟启动时播放一些旧的rpg游戏声音。我不断遇到此错误,我不确定如何修复它: self.tk.call(_flatten((self._w,cmd))+self._选项(cnf)) 错误:未知选项“-class” 我已经包括了我写的所有内容,因为我不确定错误是从哪里来的,但我相信是在“选择报警声音菜单”之后 ''' 标准闹钟 ''' 我编辑了你的文章以消除大部分错误。即 .grid(sticky=W)应该是->.grid(sticky=W') 我

我正在尝试为闹钟应用程序创建一个下拉菜单,以便在闹钟启动时播放一些旧的rpg游戏声音。我不断遇到此错误,我不确定如何修复它:

self.tk.call(_flatten((self._w,cmd))+self._选项(cnf))

错误:未知选项“-class”

我已经包括了我写的所有内容,因为我不确定错误是从哪里来的,但我相信是在“选择报警声音菜单”之后 ''' 标准闹钟 '''


我编辑了你的文章以消除大部分错误。即

  • .grid(sticky=W)
    应该是->
    .grid(sticky=W')
  • 我使用一致的格式将tkinter导入为tk
    • i、 e.
      Label()
      ->
      tk.Label()
    • Entry()
      ->
      tk.Entry()
      尽管我得到了一个与你帖子不同的错误:
嗯,看来它对我们的
self.\u configure('configure',cnf,kw)
很生气。我们把这句话注释掉,看看会发生什么怎么样

Traceback (most recent call last):
  File "C:/Users/rparkhurst/PycharmProjects/Workspace/workspace.py", line 68, in <module>
    options1.pack()
  File "C:\Program Files\Python 3.5\lib\tkinter\__init__.py", line 1990, in pack_configure
    + self._options(cnf, kw))
_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid

似乎您试图使用
选项1
执行非法操作。当您不确定自己能做什么时,最好尝试打印(dir(某些变量))。这将列出您可以访问的变量的所有方法和属性。您还可以阅读一些文档。对于
tkinter
我更喜欢使用问题的根源是这一行,它有两个基本错误:

options1.configure(window, font = "none 12 bold").grid(row = 5, column = 0, sticky = 'W')
第一个错误是
configure
方法不接受参数
window
。这就是导致错误的真正原因。如果删除它,错误就会消失

第二个问题是
options1.configure(…)
返回
None
,因此实际上执行的是
None.grid(row=5,column=0)
,这将引发错误。您需要将对
grid
的调用移动到另一行。此外,后面的行调用
pack
,您需要将其全部删除

固定代码如下所示:

options1.configure(font = "none 12 bold")
options1.grid(row = 5, column = 0, sticky = 'W')

错误消息应该总是告诉您是哪一行导致了错误,因此您应该知道错误的原因certain@Reedinationer嗯,它没有,因此,我问为什么我的机器上的错误是
NameError:name'Label'没有定义
也许你的意思是
来自tkinter import*
?@reedinator我也很奇怪,但我以前也有过,它抛出了同样的错误,大多数下拉菜单示例都显示了“将tkinter作为tk导入”和“tk.tk()”,或者类似的,尽管如此,是的,它奏效了。不知道为什么,但它给我的唯一一行是“init#uuuuupy”,它没有从我的代码中给我任何东西,谷歌也没有帮助。如果其他小部件几乎完全相同,为什么会有ilegal呢?@cwr1每种小部件类型都有允许的不同配置选项。因此,虽然您可以在
标签()上指定字体,但在
选项菜单上可能无法指定字体。如果你想要更多的定制,你应该研究
ttk
(主题tkinter),因为有更多的选项可供选择,但折衷是
ttk
程序更复杂和困难。我会努力做到这一点。现在我只是想建立一个投资组合来改变职业。非常感谢。太多的人混淆了他们的答案,让人觉得他们是在把关frustrate@cwr1我不明白你所说的“试图挫败而把关”是什么意思。我从书中自学编程,书中的内容正好相反,他们给你的代码比你能处理/理解的要多。我学习了
tkinter
,你可以从中免费找到一个PDF文件。@cwr1如果这回答了你的问题,尽管这是一种常见的做法,那么点击帖子旁的复选标记,这样未来的用户就可以知道这个答案是相关的,而不必阅读它:为什么我不必像其他标签和文本框?@cwr1:是的,创建时也是。调用
configure
Traceback (most recent call last):
  File "C:/Users/rparkhurst/PycharmProjects/Workspace/workspace.py", line 68, in <module>
    options1.pack()
  File "C:\Program Files\Python 3.5\lib\tkinter\__init__.py", line 1990, in pack_configure
    + self._options(cnf, kw))
_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
import sys
import tkinter as tk
import time
#import pygame

#pygame.init()

### load sounds
'''
opening_music = pygame.mixer.Sound("01 - Opening.ogg")
prelude_music = pygame.mixer.Sound("02 - Prelude.ogg")
nations_rage_music = pygame.mixer.Sound("03 - Nations Rage.ogg")
sanctuary_music = pygame.mixer.Sound("04 - Sanctuary.ogg")
reunion_music = pygame.mixer.Sound("05 - Reunion.ogg")
rebels_be_music = pygame.mixer.Sound("06 - Rebels Be.ogg")
'''

### create music list
music_lst = ['opening_music', 'prelude_music', 'nations_rage_music',
             'sanctuary_music', 'reunion_music', 'rebels_be_music']

### window configuration:
window = tk.Tk()
window.title("Alarm Clock")
window.configure(background='gray')

### clock function:
def ticktock():
    clock_time_string = time.strftime('%H:%M:%S')
    clock.config(text = clock_time_string)
    clock.after(200,ticktock)

### alarm set label:
tk.Label(window, text = "Alarm Set", fg = "black", bg = 'grey', font = "none 12 bold").grid(row = 2, column = 0, sticky = 'W')

### alarm string entry box:
alarm_string = tk.Entry(window, width = 20, bg = 'white')
alarm_string.grid(row = 3, column = 0, sticky = 'W')

### pick alarm sound menu
def change(*args):
    var.get()

tk.Label(text = "Alarm Sounds", fg = 'black', bg = 'gray', font = 'none 12 bold').grid(row = 4, column = 0, sticky = 'W')
music_var = tk.StringVar(window)
music_var.set(music_lst[0])
music_var.trace('w', change)

options1 = tk.OptionMenu(window, music_var, music_lst[0], music_lst[1], music_lst[2], music_lst[3], music_lst[4], music_lst[5])
#options1.configure(window, font = "none 12 bold").grid(row = 5, column = 0, sticky = 'W')
options1.grid()


### alarm function
def alarm(alarm_string_hour):
    while alarm_string:
        if alarm_string == clock_time_string('%H:%M:%S'):
            pass
            ## play sound
            ## try / except
            ## clear alarm

clock = tk.Label(window, font = ('times', 100, 'bold'), bg = 'grey')
clock.grid(row = 1, column = 0, sticky = 'W')
ticktock()
clock.mainloop()
options1.configure(window, font = "none 12 bold").grid(row = 5, column = 0, sticky = 'W')
options1.configure(font = "none 12 bold")
options1.grid(row = 5, column = 0, sticky = 'W')