Первый раз, используя tkinter, неизвестная ошибка: TclError - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь создать выпадающее меню для приложения будильника, чтобы при включении будильника воспроизводить звуки старой игры в жанре ролевые игры.Я продолжаю получать эту ошибку, и я не уверен, как ее исправить:

self.tk.call (_flatten ((self._w, cmd)) + self._options (cnf))

TclError: неизвестный параметр "-class"

Я включил все, что написал, потому что не уверен, откуда появляется ошибка, но я верю, что после "### pick menu sound sound menu"'' Стандартный будильник '' '

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.pack()


### 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()

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Корень вашей проблемы - эта строка, в которой есть две фундаментальные ошибки:

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')
0 голосов
/ 04 апреля 2019

Я отредактировал твой пост, чтобы устранить большинство ошибок. А именно

  • .grid(sticky=W) должно быть -> .grid(sticky='W')
  • Я использовал последовательное форматирование для import tkinter as tk
    • т.е.. Label() -> tk.Label()
    • Entry() -> tk.Entry() Тем не менее, я получаю сообщение об ошибке, отличное от вашего сообщения:
Traceback (most recent call last):
  File "C:/Users/rparkhurst/PycharmProjects/Workspace/workspace.py", line 66, in <module>
    options1.configure(window, font = "none 12 bold").grid(row = 5, column = 0, sticky = 'W')
  File "C:\Program Files\Python 3.5\lib\tkinter\__init__.py", line 1330, in configure
    return self._configure('configure', cnf, kw)
  File "C:\Program Files\Python 3.5\lib\tkinter\__init__.py", line 1321, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: unknown option "-use"

Итак, давайте рассмотрим, как читать это, потому что кажется, что вы не понимаете. Вы можете увидеть вверху line 66 (каждая ошибка будет выглядеть следующим образом, а , несомненно, скажет вам, на какой строке она была ). Так как же мы исправим ошибку? Что ж, давайте посмотрим на строку (также часть трассировки ошибок):

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

Хммм, похоже, это злится на нас, что-то связанное с self._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

Хм, все еще не та ошибка, которую вы опубликовали, но мы кое-что получаем! Кажется, вы также микшируете .grid() и .pack() (не предполагается этого делать). Мы просто переключим его на .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. Хорошая идея, если вы не уверены, что можете сделать, это попробовать print(dir(some_variable)). Это перечислит все методы и атрибуты переменной, к которой вы можете получить доступ. Вы также можете прочитать некоторую документацию. Для tkinter я предпочитаю использовать этот источник документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...