Я пытаюсь сделать программу, которая будет воспроизводить звуки при нажатии кнопки. Но у меня проблемы с вызовом функции. Что я хочу сделать, так это нажать кнопку LowC (или любую другую заметку), и она перейдет к LowC (или соответствующей функции заметки), а затем перейдет к функции Launch, чтобы инициировать звук. Вместо этого он дает мне ошибку "Nonetype". Я не знаю, что не так. Я попытался заменить this.Launch() на это. Запустите, но тогда он не выполняет функцию запуска, как я пробовал это. Запуск (это), но тогда он все равно не работает. Любая помощь?
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()
this
в качестве первого аргумента для методов технически правильно, но обратите внимание, что подавляющее большинство кода Python используетself
для этого параметра. - person Martijn Pieters   schedule 19.05.2014Launch
, так и атрибут экземпляраLaunch
. Последнее маскирует первое, вы не можете иметь оба. То же самое относится к вашему методуLowC
и кнопке. - person Martijn Pieters   schedule 19.05.2014