2014-05-19 3 views
0

Я пытаюсь создать программу, которая будет воспроизводить звуки при нажатии кнопки. Но у меня проблемы с вызовом функции. То, что я хочу сделать, это нажать кнопку LowC (или любую другую заметку), и она перейдет к LowC (или соответствующей функции примечания), а затем переходит к функции Launch для запуска звука. Вместо этого он дает мне ошибку «Nonetype». Я не знаю, что не так. Я попытался заменить this.Launch() на это. Запустите, но затем он не выполнит функцию запуска, а также я попробовал this.Launch (это), но потом он все равно не работает. Любая помощь?TypeError: объект «NoneType» не может быть вызван с помощью tkinter

from tkinter import * 
import winsound 
import msvcrt as m 

class Application(Frame): 
    def __init__(this, master): 
     Frame.__init__(this, master) 
     this.grid() 
     this.create() 


    def create(this): 
     test = m.kbhit() 
     if test == True: 
      print('test is true') 
     this.sound1 = IntVar() 
     this.dir = Label(this, text = "Click a button to play a sound") 
     this.dir.grid(row = 1, column = 0, columnspan = 5, sticky = W) 

     #Create buttons for Notes 
     this.LowC = Button(this, 
          text = "Low C", 
          command = this.LowC, 
          ).grid() 
     this.D = Button(this, 
          text = "D", 
          command = this.D, 
          ).grid() 
     this.E = Button(this, 
          text = "E", 
          command = this.E, 
          ).grid() 
     this.F = Button(this, 
          text = "F", 
          command = this.F, 
          ).grid() 
     this.G = Button(this, 
          text = "G", 
          command = this.G, 
          ).grid() 

     #create launch button 
     this.Launch = Button(this, 
          text = "Launch", 
          command = this.Launch, 
          ).grid() 

     #create sound length slider 
     this.TIME = Scale(this, 
          orient = HORIZONTAL, 
          length = 400, 
          width = 20, 
          sliderlength = 10, 
          from_=0, 
          to = 5000, 
          tickinterval = 500, 
          variable = this.sound1 
         ).grid() 
     #Keypress 



    #create freq conversion 
    def LowC(this): 
     this.freq = 262 
     print(this.freq) 
     this.Launch() 


    def D(this): 
     this.freq = 294 
     print(this.freq) 

    def E(this): 
     this.freq = 330 
     print(this.freq) 

    def F(this): 
     this.freq = 349 
     print(this.freq) 

    def G(this): 
     this.freq = 392 
     print(this.freq) 

    #initiate beep 
    def Launch(this): 
     winsound.Beep(this.freq, this.sound1.get()) 
     print('Tada!') 
     return 


base = Tk() 
base.title("Basic Program Outline") 
base.geometry("500x500") 

app = Application(base) 

base.mainloop() 
+1

Вам нужно будет включить * полную трассировку * вашего исключения. –

+2

Ваше использование 'this' как первого аргумента для методов технически корректно, но обратите внимание, что подавляющее большинство Python-кода использует' self' для этого параметра. –

+0

У вас есть метод класса 'Launch' и атрибут экземпляра' Launch'. Последний маскирует первое, вы не можете иметь оба. То же самое относится к вашему методу «LowC» и кнопке. –

ответ

4

У вас есть как атрибут, так и метод с именем LowC.

this.LowC = Button(this, 
        text = "Low C", 
        command = this.LowC, 
        ).grid() 
... 

#create freq conversion 
def LowC(this): 
    this.freq = 262 
    print(this.freq) 
    this.Launch() 

Вы должны переименовать один из них.

Кстати, если вы self.some_name = Button(args).grid(), то self.some_name будет None, потому что вы присваиваете результат grid переменной, а не Button например, что вы хотите.

+0

То же самое для 'Launch' и кнопок с буквами. –

+0

Да, хороший глаз :-) – Kevin

+0

Я все еще работал над тем, как это может привести к 'TypeError: 'NoneType' is not callable' exception. –

Смежные вопросы